This guide is part of the Azure Spring Cloud training
Build a Spring Boot microservice that is cloud-enabled: it uses a Spring Cloud Service Registry and a Spring Cloud Config Server which are both managed and supported by Azure Spring Cloud.
This guide builds upon the previous guides: we are going to build again a simple Spring Boot microservice like in 02 - Build a simple Spring Boot microservice, but this time it will use two major Spring Cloud features:
-
It will be connected to a Spring Cloud Service Registry so it can discover other microservices, as well as being discovered itself!
-
It will get its configuration from the Spring Cloud Config server that we configured in the previous guide, 04 - Configure a Spring Cloud Config server
For both features, it will just be a matter of adding an official Spring Boot starter, and Azure Spring Cloud will take care of everything else.
The microservice that we create in this guide is available here.
To create our microservice, we will use https://start.spring.io/ with the command line:
curl https://start.spring.io/starter.tgz -d dependencies=web,cloud-eureka,cloud-config-client -d baseDir=spring-cloud-microservice -d bootVersion=2.1.9.RELEASE | tar -xzvf -
This time, we add the
Eureka Discovery Client
and theConfig Client
Spring Boot starters, which will respectively automatically trigger the use of Spring Cloud Service Registry and the Spring Cloud Config Server.
In order to securely connect to Azure Spring Cloud services (Spring Cloud Service Registry and Spring Cloud Config), we need to add a specific Maven dependency. We will add in a specific Maven profile, so it doesn't pollute the rest of the application.
At the end of the application's pom.xml
file (just before the closing </project>
XML node), add the following code:
<profiles>
<profile>
<id>cloud</id>
<repositories>
<repository>
<id>nexus-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>spring-cloud-starter-azure-spring-cloud-client</artifactId>
<version>2.1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</profile>
</profiles>
Next to the DemoApplication class, create a new class called HelloController
with the following content:
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Value("${application.message:Not configured by a Spring Cloud Server}")
private String message;
@GetMapping("/hello")
public String hello() {
return message;
}
}
Run the project:
💡 Do not be alarmed when you see exception stack traces. Spring Cloud is attempting to contact a local configuration server, which we have not provided. The application will still start using any available local settings and defaults.
cd spring-cloud-microservice
./mvnw spring-boot:run &
cd ..
Requesting the /hello
endpoint should return the "Not configured by a Spring Cloud Server" message.
curl http://127.0.0.1:8080/hello
Kill the locally running microservice:
kill %1
As in 02 - Build a simple Spring Boot microservice, create a specific spring-cloud-microservice
application in your Azure Spring Cloud instance:
az spring-cloud app create -n spring-cloud-microservice
You can now build your "spring-cloud-microservice" project and send it to Azure Spring Cloud:
cd spring-cloud-microservice
./mvnw clean package -DskipTests -Pcloud
az spring-cloud app deploy -n spring-cloud-microservice --jar-path target/demo-0.0.1-SNAPSHOT.jar
cd ..
Go to the Azure portal:
- Look for your Azure Spring Cloud instance in your resource group
- Go to "Apps"
- Verify that
spring-cloud-microservice
has aDiscovery status
which saysUP(1),DOWN(0)
. This shows that it is correctly registered in Spring Cloud Service Registry. - Select
spring-cloud-microservice
to have more information on the microservice.
- Verify that
- Copy/paste the "Test Endpoint" that is provided.
You can now use cURL again to test the /hello
endpoint, this time it is served by Azure Spring Cloud and configured using the Spring Config Server from 04 - Configure a Spring Cloud Config server.
As a result, requesting the /hello
endpoint should return the message that we configured in the application.yml
file, coming from the Spring Cloud Config Server:
Configured by Azure Spring Cloud
In section 3, we enabled log aggregation in Azure Log Analytics. Such settings changes can take 1-2 minutes to apply, so by now, you should be able to query Azure Log Analytics.
Open Azure Portal and navigate to your Azure Spring Cloud Instance. Click on "Logs". This is a shortcut to the Log Analytics workspace that was created earlier. If a tutorial appears, feel free to skip it for now.
This workspace allows you to run queries on the aggregated logs. The most common query is to get the latest log from a specific application:
Important: Spring Boot applications logs have a dedicated AppPlatformLogsforSpring
type.
Here is how to get its 50 most recent logs of the AppPlatformLogsforSpring
type for the microservice we just deployed:
Insert this text in the text area that states "Type your queries here or click on of the example queries to start". Click the text of the query, then click "Run".
AppPlatformLogsforSpring
| where AppName == "spring-cloud-microservice"
| project TimeGenerated, Log
| order by TimeGenerated desc
| limit 50
💡 It can also take 1-2 minutes for the console output of an Azure Spring Cloud microservice to be read into Log Analytics.
Congratulations, you have deployed a complete Spring Cloud microservice, using Spring Cloud Service Registry and Spring Cloud Config Server!
If you need to check your code, the final project is available in the "spring-cloud-microservice" folder.
⬅️ Previous guide: 04 - Configure a Spring Cloud Config server
➡️ Next guide: 06 - Build a reactive Spring Boot microservice using Cosmos DB