Criar um microsserviço Spring Boot
Neste módulo, criaremos um microsserviço Spring Boot habilitado para nuvem. Ele usa um registro de serviço do Spring Cloud e um Spring Cloud Config Server, que são gerenciados e suportados pelo Azure Spring Apps.
Este microsserviço usa o Spring Data JPA para ler e gravar dados de um banco de dados do Azure para o banco de dados MySQL :
- O Azure Spring Apps vincula automaticamente esse banco de dados ao nosso serviço.
- A Base de Dados do Azure para MySQL é uma versão totalmente gerida do MySQL em execução no Azure.
Criar o aplicativo no Azure Spring Apps
Crie um aplicativo específico todo-service
em sua instância do Azure Spring Apps:
az spring app create --name todo-service --resource-group "$RESOURCE_GROUP_NAME" --service "$SPRING_CLOUD_NAME" --runtime-version Java_17
Criar uma base de dados MySQL
Agora, crie uma base de dados do Azure para MySQL:
az mysql server create \
--name ${SPRING_CLOUD_NAME}-mysql \
--resource-group "$RESOURCE_GROUP_NAME" \
--sku-name B_Gen5_1 \
--storage-size 5120 \
--admin-user "spring"
Essa operação pode levar alguns minutos e gera um documento JSON: copie o atributo password nesse documento, como o usaremos mais tarde.
Agora, crie um banco de dados todos nesse servidor e abra seu firewall para que o Azure Spring Apps possa acessá-lo:
az mysql db create \
--name "todos" \
--server-name ${SPRING_CLOUD_NAME}-mysql
az mysql server firewall-rule create \
--name ${SPRING_CLOUD_NAME}-mysql-allow-azure-ip \
--resource-group "$RESOURCE_GROUP_NAME" \
--server ${SPRING_CLOUD_NAME}-mysql \
--start-ip-address "0.0.0.0" \
--end-ip-address "0.0.0.0"
Quando esta operação estiver concluída, poderá analisar o que foi criado no grupo de recursos que criou para este workshop.
Vincular a base de dados MySQL à aplicação
Os Azure Spring Apps podem vincular automaticamente o banco de dados MySQL que criamos ao nosso microsserviço.
Navegue até sua instância do Azure Spring Apps.
Selecione Aplicações.
Selecione a aplicação todo-service.
Selecione Service Connector e, em seguida, escolha + Criar.
- Para Tipo de serviço, selecione DB para servidor único MySQL.
- Especifique um nome de conexão, por exemplo , mysql_todos.
- Verifique se a assinatura correta é mostrada.
- Escolha o servidor MySQL criado nas etapas anteriores.
- Selecione o banco de dados MySQL criado anteriormente.
- Selecione SpringBoot como o tipo de cliente.
- Selecione o botão Next: Authentication .
Na página Autenticação, verifique se a opção Cadeia de conexão está selecionada.
Selecione Continuar com... Credenciais do banco de dados e preencha os campos de nome de usuário e senha. O nome de usuário é "spring" e a senha é o atributo password que copiamos anteriormente.
Nota
Se se esquecer da sua palavra-passe, pode redefini-la utilizando
az mysql server update -n ${SPRING_CLOUD_NAME}-mysql -g "$RESOURCE_GROUP_NAME" -p <new-password>
Verifique se a opção Configurar regras de firewall para habilitar o acesso ao serviço de destino está selecionada.
Clique em Seguinte: Rever + Criar.
Depois que a mensagem Validação passada for exibida, selecione o botão Criar para criar o Service Connector.
Criar um microsserviço Spring Boot
Agora que provisionamos a instância do Azure Spring Apps e configuramos a associação de serviço, vamos preparar o código todo-service
.
Para criar nosso microsserviço, usaremos https://start.spring.io com a linha de comando:
curl https://start.spring.io/starter.tgz -d type=maven-project -d dependencies=web,mysql,data-jpa,cloud-eureka,cloud-config-client -d baseDir=todo-service -d bootVersion=3.1.5.RELEASE -d javaVersion=17 | tar -xzvf -
Nota
Usamos o Spring Web
, MySQL Driver
, Spring Data JPA
, Eureka Discovery Client
, e os Config Client
componentes.
Adicionar código Spring para gerir dados com a JPA de Dados do Spring
Junto à classe DemoApplication
, crie uma entidade JPA Todo
:
package com.example.demo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Todo {
public Todo() {
}
public Todo(String description, boolean done) {
this.description = description;
this.done = done;
}
@Id
@GeneratedValue
private Long id;
private String description;
private boolean done;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public boolean isDone() {
return done;
}
public void setDone(boolean done) {
this.done = done;
}
}
Em seguida, crie um repositório da JPA de Dados do Spring para gerir esta entidade denominada TodoRepository
:
package com.example.demo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface TodoRepository extends JpaRepository<Todo, Long> {
}
Acabe de codificar esta aplicação ao adicionar um controlador Spring MVC denominado TodoController
:
package com.example.demo;
import org.springframework.web.bind.annotation.*;
import javax.annotation.PostConstruct;
import java.util.Arrays;
@RestController
public class TodoController {
private final TodoRepository todoRepository;
public TodoController(TodoRepository todoRepository) {
this.todoRepository = todoRepository;
}
@PostConstruct
public void init() {
todoRepository.saveAll(Arrays.asList(
new Todo("First item", true),
new Todo("Second item", true),
new Todo("Third item", false)));
}
@GetMapping("/")
public Iterable<Todo> getTodos() {
return todoRepository.findAll();
}
}
Configurar o Spring Boot para criar as tabelas de base de dados
Para gerar automaticamente as tabelas de base de dados quando a aplicação for implementada, adicione esta linha ao seu ficheiro de configuração src/main/resources/application.properties
:
spring.jpa.hibernate.ddl-auto=create-drop
Implementar a aplicação
Agora você pode criar seu projeto todo-service e enviá-lo para o Azure Spring Apps:
cd todo-service
./mvnw clean package -DskipTests
az spring app deploy --name todo-service --service "$SPRING_CLOUD_NAME" --resource-group "$RESOURCE_GROUP_NAME" --artifact-path target/demo-0.0.1-SNAPSHOT.jar
cd ..
Se quiser verificar os registos da aplicação caso ocorra algum erro, pode utilizar o comando az spring app logs
:
az spring app logs --name todo-service --service "$SPRING_CLOUD_NAME" --resource-group "$RESOURCE_GROUP_NAME" -f
Testar o projeto na cloud
Agora que a aplicação foi implementada, é altura de a testar!
- No portal do Azure, vá para Aplicativos em sua instância do Azure Spring Apps.
- Verifique se todo-service tem um status de Registro que diz 0/1. Essas informações mostram que ele está registrado corretamente no registro do serviço Spring Cloud.
- Selecione todo-service para obter mais informações sobre o microsserviço.
- Copie/cole o "Ponto Final de Teste" fornecido.
Pode agora utilizar cURL para testar o ponto final. O seu comando de teste deverá ter o seguinte aspeto:
curl https://primary:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX@azure-spring-cloud-workshop.test.azuremicroservices.io/todo-service/default/
Este comando deverá resultar nos três itens que foram anteriormente inseridos na base de dados MySQL:
[{"id":"1","description":"First item","done":true},{"id":"2","description":"Second item","done":true},{"id":"3","description":"Third item","done":false}]