Criar um microsserviço do Spring Boot
Neste módulo, criaremos um microsserviço do Spring Boot habilitado para nuvem. Ela usa um registro de serviço do Spring Cloud e um Servidor de Configuração do Spring Cloud, que são gerenciados e compatíveis com os Aplicativos Spring do Azure.
Esse microsserviço usa o Spring Data JPA para ler e gravar dados de um banco de dados do banco de dados do Azure para MySQL:
- Os Aplicativos Spring do Azure associam automaticamente esse banco de dados ao nosso serviço.
- O banco de dados do Azure para MySQL é uma versão totalmente gerenciada do MySQL em execução no Azure.
Criar o aplicativo nos Aplicativos Spring do Azure
Crie um aplicativo todo-service
específico em sua instância dos Aplicativos Spring do Azure:
az spring app create --name todo-service --resource-group "$RESOURCE_GROUP_NAME" --service "$SPRING_CLOUD_NAME" --runtime-version Java_17
Criar um banco de dados MySQL
Agora, crie um banco 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 de senha nesse documento, pois o usaremos mais tarde.
Agora, crie um banco de dados de tarefas pendentes nesse servidor e abra o firewall dele para que os Aplicativos Spring do Azure possam 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"
Depois que essa operação for concluída, você poderá dar uma olhada no que foi criado no grupo de recursos que você criou para este workshop.
Associar o banco de dados MySQL ao aplicativo
Os Aplicativos Spring do Azure podem associar automaticamente o banco de dados MySQL que criamos ao microsserviço.
Navegue até a instância dos Aplicativos Spring do Azure.
Selecione Aplicativos.
Selecione o aplicativo todo-service.
Selecione Conector de serviço e escolha + Criar.
- Para o Tipo de serviço, selecione BD 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 cliente.
- Selecione o botão Próximo: Botão Autenticação.
Na página Autenticação, verifique se a cadeia de conexão está selecionada.
Selecione Continuar com... credenciais de 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 de senha copiado anteriormente.
Observação
Se você esquecer sua senha, poderá redefini-la usando
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 no botão Avançar: Examinar + Criar.
Depois que a mensagem Passou na validação for exibida, selecione o botão Criar para criar o conector de serviço.
Criar um microsserviço do Spring Boot
Agora que provisionamos a instância dos Aplicativos Spring do Azure e configuramos a associação de serviço, vamos preparar o código para 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 -
Observação
Usamos os componentes Spring Web
, MySQL Driver
, Spring Data JPA
, Eureka Discovery Client
e Config Client
.
Adicionar o código do Spring para gerenciar dados usando o Spring Data JPA
Ao lado da classe DemoApplication
, crie uma entidade Todo
do JPA:
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 do Spring Data JPA para gerenciar essa entidade, chamada TodoRepository
:
package com.example.demo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface TodoRepository extends JpaRepository<Todo, Long> {
}
Conclua a codificação deste aplicativo adicionando um controlador do Spring MVC chamado 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 do banco de dados
Para gerar automaticamente as tabelas do banco de dados quando o aplicativo for implantado, adicione essa linha ao arquivo de configuração src/main/resources/application.properties
:
spring.jpa.hibernate.ddl-auto=create-drop
Implantar o aplicativo
Agora você pode criar seu projeto de todo-service e enviá-lo para os Aplicativos Spring do Azure:
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 desejar verificar os logs do aplicativo, caso algo falhe, você poderá usar 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 nuvem
Agora que o aplicativo foi implantado, é hora de testá-lo!
- No portal do Azure, acesse Aplicativos na instância dos Aplicativos Spring do Azure.
- Verifique se o todo-service tem um Status de registro que indica 0/1. Essas informações mostram que ela está registrada corretamente no registro de serviço do Spring Cloud.
- Selecione todo-service para obter mais informações sobre o microsserviço.
- Copie/cole o "Ponto de Extremidade de Teste" fornecido.
Agora você pode usar o cURL para testar o ponto de extremidade. O comando de teste deve ser semelhante a:
curl https://primary:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX@azure-spring-cloud-workshop.test.azuremicroservices.io/todo-service/default/
E o resultado desse comando deve ser os três itens que foram inseridos anteriormente no banco de dados MySQL:
[{"id":"1","description":"First item","done":true},{"id":"2","description":"Second item","done":true},{"id":"3","description":"Third item","done":false}]