code and the Microsoft OpenJDK 17 on Azure

미연

·

2022. 5. 12. 12:22

Hello everyone. We're here to discuss the Java Developer Experience on Azure.I'm your host, Rory Preddy, and I'm a Caucasian male wearingbrown hair and I've got a black shirt on and I'm wearing glasses. I'm speaking to you from Johannesburg, South Africa.I know it's not Canada, but I'm a developer advocate working for Microsoft that reaches developers where they are.If you want to know more about what I do, you can follow me on @RoryPreddy on the Twitters.You can QR code this and click through to the material that we're going to be discussing today.This session today is all about understanding how the Java developer can get started on Visual Studio Code and then also push their project to Azure.We're going to be doing a lot of hands-on demo and slide, so get ready. First, Microsoft loves Java and a lot of people get taken back a little bit and say, what, no, you can't know what's going on.Historically, we've kind of pushed back but now I can say that we have 500,000 virtual machines in production.Now, this isn't customer workloads. This is workloads that we use to run LinkedIn, Azure, Yammer, Minecraft and our Android apps. That means that we heavily invested in Java at Microsoft.Not only do we use Java, but we also support a very strong partner ecosystem.We engage with VMware, RedHat, Oracle, IBM, Redis, Elastic, Confluent, Azul to name a few. We create an ecosystem where one and a half million Visual Studio Code Java users use our tools to build their applications. We're also part of the Eclipse Foundation.We have our own Microsoft build up open JDK adoption, which is how we're a founding member and project contributor.The Spring Services, we have Spring Cloud for Azure and also we have our integration libraries.We love GitHub so much we bought it and now we have 3.6 million Java repositories hosted for free on GitHub Visual Studio code.We have Java extensions, which we're going to be covering today for Maven, run, build, debugged, unit testing, all of that, and then also support for popular standards and projects.What we're going to show you today is capabilities of Visual Studio code and then some Azure services that we're going to demonstrate.First of all, we're going to go through getting started navigating your code, modernize your app, validate and troubleshoot team collaboration, and then to the Cloud. In between there, we're going to look at how to use GitHub code spaces, GitHub actions and some of those nice services there.First to get started, you need to go in and we're going to install the Microsoft Open JDK.You're going to go to Microsoft.com/openjdk, and then you can also install the extension pack for Java and you can go to aka.ms/coding-pack. What that will allow you to do, it installs Visual Studio code and all the extensions that you need for and to get started with Java and Visual Studio code and then the first thing that you'll be greeted with is a project.You want to start with a project now you can work with file based projects or build tool based projects.You can use Gradle, Maven, and or you can just use class based projects.You can load your project by opening a folder. You can view the build status and then we also allow you to trust a workspace if you don't want to have local access to your file system. Then once you've done, you'll see that there's a fully imported view there with a thumbs up to say everything is ready.What about your build tools, which are starting from a wizard tool?Now you can actually get started with your build systems. We've got Maven, Gradle archetypes, Spring Quarkus, Microprofile and recently we've included Java effects for your graphical user interfaces.You can actually go create a new Java project and then you can specify the project. There you can see the Maven Gradle, Spring Boot, Quarkus Microprofile and JavaFX. In your project Explorer,once you get started with that, then you'll see there that it's got the file view and also the Java project view.Now throughout this demo, we're going to be using the Spring Pet Clinic and I'll show you how to download it and a link to it at the project at the end. The Java Project Explorer here gives you a view, a very typical view that an idea would give you and it shows you the class based view there, along with your folders and also your libraries that you have. You can inspect your packages, run and debug and export your jars. Once you've got your project structure set up, you can inspect your code. You can right click on the symbols to navigate. You can hover over to go to Java Docs and you can control click to go to definitions and there's a lot in there to help you to navigate. You can even peek through some of the values, find those references, and it is a very powerful ecosystem to inspect your underlying code. We also have auto completion so you can type in to see suggestions and these are very intelligent suggestions because we scan what the recommended suggestion that other developers have used and then we give you the recommended solution. We also have another tool that we partner with GitHub, which is called GitHub copilot that allows you to write out the entire code. This coded thing with auto completion is called an intelligent code auto completion that allows you to really see what is most of the developers using that you want to get your code completed with the refactoring there you can click on refactoring or renaming. The nice thing about refactoring this, you can get a preview for the refactoring. We're going to see how you do that in the demo, which allows you to make the changes to your code, preview the intended changes, and then to execute it without having to go and execute it without understanding what it does. The code generation, you can generate your tests, your unit tests, you can organize your imports. We have a lot of method generation getters and setters, hashCode and equals to string constructors, delegate methods and then also change your modifiers.When you get an error, you want to see the errors and warnings. We actually put them down there on the gutter and you can actually go and right click on the errors and see quick fixes for that.Validate and troubleshooting so you can also go click on the light bulb. That little light bulb there and you can go in and see quick fix options right in your code and remember you can actually do it on the gutter with those changes. Debugging, we have a really rich debugging ecosystem here.One is you can start debugging, you can debug and run and let you inspect your code, your call stack, your breakpoints, and then you can use the debug toolbar to go in and look at your variables. Now, a little icon there.We're going to be demanding that hot code replace and allows you to actually make a change not in debug and click it in and it will go in and inject the code that you're looking at right into your container without worrying about restarting your service.Team collaboration. We partner heavily with GitHub around this and you can see your pull requests, your issues and obviously you've got also your source control there that allows you to edit your services there.You can see that there's one that I did for Roman, there's a principal in the VS code there, and I pushed a change there and he can approve it and merge it directly from Visual Studio code. You want to push it to the Cloud? We've got an Azure Toolkit there, the little "A" icon there. You can deploy it to a service. You can add database connections there, edit your application settings and then also connect to your log stream and deployment slots and then scale out straight from Visual Studio code.Once you're in Azure, you also want to see where do I want to go there? If you need infrastructure control and you have a technology preference, then we recommend using a Azure VM or the Tanzu service or Azure Kubernetes or RedHat Open Shift. But if you don't have infrastructure control requirements, are you using an app service or spring? If you're using an app service, then Azure app service really is the best place to go.You can use Tomcat or JBoss EAP, but if you're using spring, we have a service there called Azure Spring Cloud, which is basically a really high level Kubernetes service that we run that takes away all of the worry about running spring applications. You can also run and we're going to test later in the demo spring boot applications standalone on App Service. You've got your code in there.It's running on Azure and then you want to do everything as code. Run your inner loop with your feedback loop there.You're going to run your inner loop there using GitHub code spaces and you've got your ID and you've got your Dev cluster there and you've got code test and debug. You're going to push to GitHub and you're going to run the build process using GitHub actions, test scan it using code build and then deploy either with provisioning with Terra Form or ARM templates using GitHub actions and then implement your Azure policies to scan in your staging and production. You can also use container images and registries to run that.You use Azure monitoring out of the box and then go back to your inner loop process and rinse and repeat.This is really an agile process that we partnered with GitHub to give you the best Cloud experience to allow you to have rapid development also with feedback.Monitoring, very important, it's actually the number 2, we did a survey and number 2 ask for service other than data storage in Cloud and we've got automatically scaling and distributed tracing, you can see there that's our distributed tracing. Once you identify your tracing issue here, you can go in and you can set your scaling requirements to scale your app service out there. You can see there I'm scaling up at three instances and so scaling out at three instances and once I run out of load or I don't have any load anymore, I scale down to lower the cost, I scale down gently there and you can see there I've got my scaling log already set up for you.If you want to run a VNet we have a very easy service to run that, we have an app service environment. You can actually take your service there and it's a single tenant environment isolate it away from other and as servers and you can run that there in your services there in your VNet there and have a complete control over your scaling workers and also your application as services.That's all the slides I want to show you today, we've got a nice demo and then I'm going to show you some services. Follow me at the demo and we're going to get started.The first thing we're going to do is I'm going to show you the repo. Let's go into the spring-petclinic and I want to make that a little bit bigger. This is the spring-petclinic project and I've done a fork of this because I'm going to change it fundamentally over the period of our demoing here and you can see there, I've got roryp spring-petclinic and you can go in there and to fork that you can just go into your spring-petclinic and you can just click on "Fork" there.Fork that over there and then you can see I've got a two service GitHub enterprise account and my local account also.Now I've got my services here, so my repo here and you can see there I've got wow, seven commits ahead I've really been working on that. But I want to work on it locally before I show you GitHub code spaces.I'm going to go click "Code" there and I want to go into local, you can see there I'm going to open up with GitHub desktop or I can just clean it and I've got GitHub desktop, which is a nice little replication that I run on my Macintosh and I can just go click on "GitHub desktop" and I will open the project for me without too much hassle.Now, you can see that already have done some changes, I can fetch origin and I can do that. But it also allows me onto my repository, I can go there open in Visual Studio Code. I can open the Visual Studio Code and I've got the application, I've got VS studio code open here. Well it did not open there so this is a lot. Oh there we go.It open there incorrect and there we go. It's opened the project here, I've also got my job help center.Now, this is important because you might not want to clone directly of that. Now, remember, we've installed the language pack for Java, it's got everything running there and I've also got my Microsoft Open JDK running. If you want to check out the Java --version and it should see their up at the open JDK, the Microsoft version of Open JDK.In the Java Help Center, let's just minimize that, you can create a new project, you can open an existing project, you can take a tour, and then also has got under General Spring and Student you can configure your Java runtime, open your Java settings, install extensions and configure formatting settings. I want to just see what Java runtime I'm running right now with my application.You can also run a different language level on any of these applications. I can go configure Java at runtime and you can see there I'm running spring-petclinic, it's picked up Gradle you can run Gradle or Maven and then the Java version I've got there is running 1.8. Now I'm running the Java 11 JDK but in 1.8 version.You can actually downgrade that to whatever you want to run. Now you can actually set that up, you can go Java version and you can change that.You can also install new Java runtimes so you can go configure Java runtime and we want to go into the Command View.This is the first time we're going to go in Command View. We're going to go view command palette and we're going to go JDK, install new JDK.You can see here, you can install a new JDK. Now I can go in to Adoptin's Timrun and you can see there that even Java 17 is out, you can download and just last week we had a release of the newest JDK, but you can go in and get Java 17. You can also download Hotspot or another version and then also you can go in and download others. Wow, look at that, maps of build of open JDK.You can go in there, install it, and then set your JDK to the version that you want. That's configuring your Java runtime and you can also go in and create a new project. But we already have spring-petclinic open, so we're not going to go in and skeleton out a new project though.We've got spring-petclinic fork there and you'll see there that I've got a few new windows, I've got my file window here and this is your file explorer window and you can see I've got all of my source projects there, let's make this a little bit, there, I've got my source projects, my main Java, and then I've got all of my actual projects.Now watch when I click on this, when I click on this, it's going to start up my JDK. At the bottom there, it's got the version of the Java JDK there, so you can see the Microsoft JDK. It's got the language server there's running of process that is running there, and then it's got a little thumbs up to say everything is hunky dory. You really want to watch for that. Once that runs and you also see that it adds it into the Java projects view. I've got my Java projects view there that I can see there. This is important because this allows you to control the process of your running Java application inside Visual Studio.Also, you can have a process running on the side that you're going have to go and kill it and remove it there.All I have to do here, once this project is running, if I want to run spring-petclinic I could just click on spring-petclinic.If it doesn't have the maven dependencies or greater dependencies, it's going to go find it in there, and it's going to run this as a process inside the Visual Studio code. You can see there it's running, it's already started.Well, I'm not too sure how long it took, but that 10 seconds to start here.Now, I've got all of my applications here running and I can even do the hot code replace which is pretty nifty here.Let's go see the application that we're running right here and I can go into that application through my view here at the Java projects and let's go into our local host for our view here.Go here and then to go local host 8080 and this is the spring-petclinic application.In here I've got a bunch of owners who can have pets and they take their pets through to a vet.If I go find owner and I want to find the owner there and it gives me a list of owners, there's George Franklin and I can click on "George Franklin," I can see, I can edit him so I can edit that owner and update the owner, I can add a new pet or I can go in and see existing pets though.Let's go find someone who's got an existing pet. Betty Davis there's a pet there.We've got Basil and who's a hamster, we can edit that pet, update the pet, and then we can also go in and add a visit for a vet, so a vet visit. I can add that vet there.I can also with this tool go in and I can simulate an error which will come back to distributor chasing afterwards and see something happens. I've got an error and now it's going to trigger in as we when we push it through to Azure add a error. Coming back to our project here, let me just close that window there. There we go and there's our project here.I'm going to close that there and let's go through some of the screens to understand exactly how they work.We've seen the file view there, we've seen the Java projects, and you also have the ability to run your build tools if you want to create a new project. MAVEN, you can actually go in and see the lifecycle, the plugins and dependencies. In the lifecycle here I can go and click and install and it's going to run through the entire project there and also the test cases.You'll see there that it actually is going to build my artifact for me and do my CSS pre-processing.All of this is enabled through here and you can also go in and check your plugins.Some of the plugins that I've added recently to this project is the Azure Web app plugin.If you have, you can see there's the spring boot plug in there and I also recently added the Web app plugin. There we go.Here's the Web app plugin and this allows me to actually deploy to Azure, we're not going to do that right now but you can deploy using the Azure Web app plugin and straight through to Azure. We also have something which most IDEs charge for called a spring boot dashboard. This is important because what this does it scans your entire project and looks for spring applications or it might be a spring boot or just a plain spring application and you can run this application now straight off the bat. If I just click on "Spring Boot"like you would your Java projects. Except the difference is it understands spring. Let's just click that there and it doesn't seem to want to run.We're not going to lose sleep over that because we can still run it through the Java applications project there.Coming back to that so now I've showed you the welcome screen setup JDK, the settings and the project view.Let's go in and see the IntelliSense for some code based editing here.The first thing I want to show you is if I go to my spring application here and I've got my source, we're going to go in and we're going to be working on the owner controller. The owner control in that package is actually in the package org.springframework.samplespetclinicowner. You can see that there and if you want to go back to that there, you can right click there. There is a way to actually go from this file through to that over there. I'm not too sure. I can't remember exactly where though, but there is a way there. Let's just go see. We went to go edit and selection, but there's a way to actually go back and to see what value in here to the view here.Let's just go. Oh, there we go. Reveal in Finder, Reveal in Side Bar. This is very important, I've seen a lot of people battle with this. We're going to go Reveal in Side Bar and it will go to your actual project to navigate that.Once you're in the Java class, you can go forward and back through to the two of them. Let's go see some intelligence here.We've got control here. We're going to be working in this sothe process find form and that is if you want an owner to view and find by the last name.If I click here and I go owner. and then you can see there it will tell me what I can actually use for the owner.setname. But if it's a common API like for example, a string, you might want to actually get a view of what other people get.If I go paginated, so you can see the paginated.and it will give you the views of the most common mechanisms that other people use if it has available else it can actually just give you the basics.It's going to happen you back and get the view here. We want to go as spring application.It showing me what I can do, and then I can actually go in and choose what most people select there.Let's edit Control Z or undo and you've got your applications there, and that's called IntelliSense.Now, for type hierarchies, so I want to give you an example of a vet.Let's go find vet here.Let's see here, extend the person. How do you work out what your type hierarchy is for your underlying class here? You can actually click on "Vet" and you can right click there and go to type definition implementations, but you can also say, show type hierarchy.You can click on that and you'll see that you can actually get a type hierarchy, and click through and go through each one of those, even to the base entity in the superclass and and alsoeven all the way to Java object so that's your type hierarchy to actually see your class.You can access that both from the hierarchy view and you can also go in there under vet and you can find all references. For super classes you can see they show core hierarchy and also subclasses via the searching engine.If I want to do refactoring, a vet has a specialty, so if I see specialty here, maybe I want to move specialty to a different folder. I can actually click on "Specialty", and this is where the magic starts, and I can take specialty and I can move it into the owner view. Watch what happens there?Because "Are you sure you want to move owner specialty into the owner view?" Yes, move. Now, it's going to give me a preview, so you can go show preview. Now, look at that. Before I move, it actually shows me what I can and what's going to happen to it. I click "Apply" and now specialty the actual package is changed and all the references have changed. I can go into my kit and see that it has actually changed there.But I want to undo that quickly, because else my code is not going to work. I'm going to take a specialty and I want to go drag it again and make that a little bit bigger there back into vet, so drag it into vet.I want to go move, show the preview, apply, now the only change I should actually have is the Pom model fiddling around with the Web App. There we go. That's the only change that we have there, so specialty.That allows you to do order refactoring. You can go in there and you can click on a "Specialty" and you can move it also, so you can go refactor and you can move that there. It's a very same order preview features that you see with refactor. You can also refactor methods and also objects.Once we've got our process here, I want to see data break specialty, so I can go in and I can run Maven test, Yes, I can go MVN test. Now, watch how long this takes. The problem is that this is actually running on the operating system outside of Visual Studio Code.Recently what we did is, we took all of those test cases that we had. Now, there are about a hundred test cases that run inside the pet clinic. For Maven to run that, it takes about 22 seconds to run that.You can see that it's pretty lengthy. The reason for that is actually opening up a thread per test on the operating system and mocking it. We realize that that can take quite a considerable time to run.We built in the same unit testing into Visual Studio Code. You get from a 35 seconds view here.Let's see how long that takes. Your test explorer, so let's go testing, you can see here, we put all our tests here.Now, you can click through. Let's go through the last test here. Let's see the last test there we go here, test run a petclinic integration test. Let's go here, and let's see the petclinic, and we got the integration test. You can go into test and you can run each one.This one, you can run each one, find all. You can see there, it's running your test there and it's going to feedback there once you finish that refreshing data from the spring process, and it's going to come back there you can see that took 200 milliseconds. That's great to know, and you can even create new tests.But how long does this going to take if I run all of them? Let's let's go break the bank here. I'm going to run them all.I'm guessing it was 37 seconds, so I'm guessing maybe 25 seconds, maybe, 26 seconds. Let's see how long this is going to take. We're going to run the same number of tests, 49 tests, but we're going to run them inside Visual Studio here. This is going to get a view for all of the tests that pass or fail. We've got 39 tests in all, 1.6 seconds.You can see this is a fundamental change that we've implemented recently to allow you to do that, and you can even see that this is a test that we've disabled there as part of the petclinic, because it's a system test that they test there.A huge change that we've got here, you can also go and generate. If I go to specialty here, I can go source action and then I can go generate tests and you can actually specify the test classes and all of the method names, if you wanted to do that into your test class, so you can create your tests there. Now that we've got our application and I haven't broken my project, let's go do some hot code replace.I want to show you a little bit of a hint, that you can get for hot code replace with spring.Every time you change a class, it's going to restart the whole spring server you want to put System.getProperty, spring.devtools.restart.enabled equals to false.That will allow you to stop spring from changing all the time. All that I'm going to do is put a system up print when we found the owners, with the name of the owner that we're looking for there, and I'll show you how to do some hot code replace here.Let's go back into vet and specialty and let's go into our owner controller here.We're going to debug and we can do hot code replace. The first thing going to do in Java projects, we just going to go in and we're going to run this here. Now, I'm debugging, but I'm not broken into a breakpoint, and it's a fundamental change when you do hot code replace.I've got this code here, and let's go in and see that.We've got that there, I don't want Maven, I want bash, let's see.I think I lost the window there. Let's close that. Let's close all of our bash windows here and let's start again.It's always good to start clean when you're doing that. Let's start that there, and I've lost the view. Let's go into our view windows there, and it's good to see a view. No Mac, I want to see a view. You want to go view and you want to go to testing extensions outputs, there we go, output and we want to not go top task so, problem debug console terminal. Let's go to terminal. For some reason it's actually stopped the view, but okay. For the output view, we don't actually have that.Let's see, did I break that suspend petclinic. I think I did, no I didn't.Now, if we go there and we view that there, we can actually go into our find owners and we should see there find owner, and George Franklin. Let's go in there and see if we can find the outputs, the terminal output tasks. We want to see the Visual Studio Code log settings here.Let's start that one more time, spring-petclinic. Let me just restart my ID there for second, so I'm going to go close folder, and let's open that one more time. Rinse and repeat is what we want to do.Open recent and we're going to open that again. There is my output and we want to start that, and you can see that it's starting the Java process again and I've got my spring dashboard and my Java project. Opening the Java project, and you can just pick spring-petclinic. I'm going to start this up here and then hopefully we've got our outputs and our tasks.Then also we're just going to break, we're not going to do hot code replace. We're going to go straight to the break.I click on that, it's compiling it, it's going to run, and there we go. All I had to do is close and open my window.How ironic is that? They're not starting there around that, and let's go back into our controller window there.We want to own a controller and I click on "Owner controller" and let's go into, I'll find owners here. We want to do a getowner.lastname, and we want to just get that name.If I see here, and I run my code, and let's go find owners here and I find owner.You'll see there, that there's nothing that gets outputted. But if I go in, and I go at sout, which is an s template and we want to get the last name there, so system.Outprint, and last name.Now I can save that, and last name capital N case. I can save that, but it's not going to print it.If I go here and I go find George Franklin again, now we want to go "find owners" "find owners" here and find owners and we go paste find owners you see there, it's not going to actually find that owner.But I can just go hot code replace watch this. Hot code replace and it goes one change one class change is reloaded and we should see if this works and find owner there.Now we've got test there. We can actually see that that's how you do hot code replace. But I can also go in and I can click on I want to put a breakpoint and I can go in and go at "Find owner" and I can see and I can add a last name, I can add a watch. We want to go there and actually add a watch there and we want to go last name. We want to step over that to get last name.You can see that there's test. We've got all the breakpoints there. You've got the core stack you can step over, step into or you can step out.You can go back to the calling method there and you can also do hot code replace inside this. If I wanted to go in there and print that, I can go while we do debugging and I can go hello canalso go in and do hot code replace you're going to restart your debugging process with the hot code replace there.Because you're kind of injecting the class to from there. You debugging a debunking process there but yeah.That's how you do those two to hot code replace. Spring dashboard. Let's see if the spring dashboard is behaving right now so you can go into spring dashboard there. Let's stop that. Before, if you remember in that demo, it wasn't working. Let's see if we can get it working there. Still not happy with me for some reason.I did play around with some of the services there, but you get the same service there for run debugging, if it was behaving. We've gone inland, debugging and debugging options.That's a very new feature that we have. We'll show you debugging and some of the debugging options.But if I go to debug and I click on add debugging options, there is a new service that we've added to Visual Studio code is that you can actually see a lot of the services here. It's started here. If I go in and I put a breakpoint, let's go in there. Let's go breakpoint. I put a breakpoint there I can actually see the inland options.You can see owner is there and gives me the name and I can go step over and I can see the last name inside the inland variables there.You can see all of the services without having to add the watch services there.That's everything I wanted to show you from the what's new and some of the services. Now let's switch to Azure.There's a few ways you can actually do that. We built the application. The easiest way is I've really gone in and both a Azure Web App and so you can right click here and you can just go deploy to Web App.Now I've got the Azure Toolkit installed. You can go into your extension here and you can just go in there and you can install the Azure Toolkit.Let's go into Azure, let's go here and there's a there's an easy way to do that.You can actually do the Azure Bundle. Azure Tools, as you can go into Azure Tools and it's got a 12 packs in there and it gives you app services, storage, database account and CLI tools, Pipelines.You can go in there. In my Azure View, I'm going to Azure View here, I've got app service, I've got functions and storage and I've already created an app service. You can actually go in and create a new one from the app service view here and I called it spring picnic RPG or rory preddy. Just to save on time.You can see there's the application here. Let's close all of that. Now, this has a spring-petclinic already deployed from a previous project. You can see there I've got everything running and I've also got deployments and a history of deployments that I've done prior to that. I will show you the view of the deployments.Now, what you'll notice here is that some of the deployments are from Maven, because I've done some Maven deploy, and some of them also have been from GitHub actions.You can actually deploy through GitHub actions or you can do deploy through Maven and or you can actually deploy through the add Visual Studio code.Now, easiest ways is Visual Studio code. You can right click there, deploy to Web app and then you can either create your Web app from the beginning so you can go just deploy or you can if it's preset up with that, you can see that I've really got the spring-petclinic already set up. It's going to go run your Maven build again.As a pre-deployed task and then it's going to take your jar file and run it as a standalone spring application where you can still run this on Azure Spring Cloud as a Kubernetes based application and you can scale up to 500 instances with Azure Spring Cloud. Once it's finished, it's going to give me the option to look at my logs or go in and browse the application. We want to browse the application because we want to create some traffic on there because I want to go see and wait. I'm hitting a database there. It's actually an H2 embedded database.Is it performing? Do I have to scale out? What about Postgres or MySQL what I want to do there. Also, now that it's on Azure, I want to use GitHub actions to run this. You create a zip file and then you push it through to your rest service and your rest service then will allow you to go in and publish and deploy your application.Now I'm doing this via the web app service at Visual Studio code, but I've also got, if you see here a little GitHub folder here where I've got my GitHub actions.While this is taking there, you can see that I've got my GitHub actions now and as soon as you push it there, it's actually runs for free on GitHub actions, you get a free amount of minutes and storage you can use.I've got my actions. It'll check out the repo. It'll set up Java for Java 11, it'll use Maven clean install to go in and run the build and upload the artifact into a repository down in the storage. Then it's going to go in and deploy it using Azure Web apps with a service principle that Azure has already set up. I'm going to show you how to do that now.I've got my spring application here. I can stream my logs. I'm going to go browse the website. It's going to take me to my spring-petclinic application here.If everything's running and I've just deployed this love and it's going to go in startup my application, it's going to also go in and we can actually go check the let's go check the logs here so I can go into Azure and I can right-click on the application and I can go start streaming logs. Let's see if this is starting up and everything.We should say hello to petclinic when it actually starts down. Shut down and it takes a few seconds to actually start those logs.Let's see if it comes back with the, there we go. Then let's let's go back there. That's our application and then logs will come through and it will stream through so we can actually go find owners. Now we're on Azure. You can see you there. I'm going to find the owners.Where's Betty Davis and she's got let's add some telemetry and we've got that "edit owner" we had a pet and I'm sure we had a pet on Betty Davis one of them had a pet.Let's go back into home I think it randomizes there sometimes. "Find owners" and we want to find the owner George Frank.Randomizes. We want to go edit the pet. Update the pet there and we want to go in add visit and we want to just get the test and we also want to create an error there and when added error, a few errors. Now we've got a lot of telemetry there.Let's go in and see can we see this and what how do we trigger out GitHub actions?The first thing that we want to go into an application is you can see here, here's my portal with my spring-petclinic application with my app services and I've got my application there and it even says, are you using log4J? You should not use log4J, which is great. Then you can go application insights.We want to see that database and then we want to start the GitHub action so you can go view application inside data.This is built into that. When you create an app service from give you the option, do you want to use application insights? Then you just need to enable it via the portal for the first time and you can go in there. Now we don't have to do any setup for the telemetry it gives you start from your browser all the way to your database, your telemetry. You can see here is the last hour.I want to see the exact same one that we just did 2 minutes ago. I'm going to do last 30 minutes and apply and I want to find Betty Davis. I know this is Brave. I want to find that SQL Command for Betty Davis.We're going to click through here. You can see there it's got a number, of course, and it's going to go in and find the performance.Also let's just go refresh. I'm adding the funnel. There we go. Slowest request by name.Look at that post and let's go investigate the performance. It found the post owners. We created a new owner member created a vet so let's go see the here. Now you got just your server browser server. It's on your server-side and also browser which is on the JavaScript if you want it and go log at JavaScript-based events.Then you've got your operations and dependency. Your operations here, you can see get owners and so you can click, "get owners" and you can drill down to the samples. I want to do the post edit and the service there and I can also see if I go into the post service, what are the SQL dependencies? I can go into the SQL dependencies and you can see there it's got the select statements there and all of those other developer statements there. But I want to go back into my post. I want to see what did I not post there, so I go post owners edit and I want to drill into the sample so I can drill into the samples here and I've got here.Post owners editing an owner so I can go into there and now I can see the SQL command and how long and the actual SQL.It's going to select owner and it's getting the owner and a back for me, and then I can go in and view all the telemetry, but I can also go in and see transactions. If I go into performance and I can see the get owners command.I want to get all owners and then I want to see get all owners. Now I should be able to get, look at that.All of the owners here on the services, I can see exactly each one of the select statements and go back in there and change it.Now I can use order scaling to scale up or scale down depending on is my database or my service being performant and then I can go in and activate GitHub actions, which is pretty simple. All I have to do in my spring-petclinic application, let's go into app services, spring-petclinic, and then I go into my deployment center.Deployment center and I activate GitHub with the GitHub repo. It will ask you to connect your GitHub account, but once you connect to it, it will set up the little GitHub actions for you. I didn't write that GitHub actions.Every time you push to that PR for that project, it will actually go in and run come on here.You can see there I've got my GitHub actions and I can actually go into my GitHub actions here, select my GitHub actions, and I can see my workflow here, build and deploy jar and I've got my build command and then my deploy and I can run each one of those separately or I can just go into them and I can just re-run all jobs.Let's re-run all jobs here, build and deploy. We're going to re-run this on GitHub actions. I've shown you a lot today.I've shown you how to take your application, how to clone it, how to start from the beginning. Then how to use all of the screens in Visual Code, set up your JDK, the type hierarchy, the refactoring, the Maven lifecycle, the test explorer.How do you use the debugging functionality there? How to push to Azure? The easiest way is just right click and connect there.Then also how to use GitHub actions and how to do this with CICD in your inner loop pushing through to Azure.That's everything I wanted to show you today. I'm going to go back to my slides and then we're going to go the roadmap, which is really the exciting thing. We've got so many things coming in for the fundamental inner loop improvements, performance and reliability, the build tools, the spring boot end to end improvements, the user experience, and the Cloud native deployment in Visual Studio code for Java so stay tuned and definitely go download it and keep abreast of those services. You want the material, so I'm a co-author of the Java learn path. You can go in there and get started with that. We have quite a lot of Java material on Microsoft Learn.You can go, aka.ms/java-learn.path or you can go in to start the tutorial that I just did with spring-clinic on aka.ms/vs-code-java. Or you just want the application with a spring-petclinic application, you can go in there and get spring-petclinic. As always, follow me on at RoryPreddy or scan the code to get the repo and the source that I just mentioned here. Thank you-all for a great opportunity to show you the continued investment that Microsoft has with Java on Visual Studio Code and Azure.Thank you for joining this webinar today. We will continue to address your questions in the Q&A window for about 10 minutes or until the portal closes. You should receive an on-demand version the next day to re-watch this webinar on your own time. Please check your junk mail if you don't see it.