Criar um microsserviço do Spring Boot

Concluído

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.

  1. Navegue até a instância dos Aplicativos Spring do Azure.

  2. Selecione Aplicativos.

  3. Selecione o aplicativo todo-service.

  4. Selecione Conector de serviço e escolha + Criar.

    1. Para o Tipo de serviço, selecione BD para servidor único MySQL.
    2. Especifique um nome de conexão, por exemplo, mysql_todos.
    3. Verifique se a assinatura correta é mostrada.
    4. Escolha o servidor MySQL criado nas etapas anteriores.
    5. Selecione o banco de dados MySQL criado anteriormente.
    6. Selecione SpringBoot como o tipo cliente.
    7. Selecione o botão Próximo: Botão Autenticação.
  5. Na página Autenticação, verifique se a cadeia de conexão está selecionada.

  6. 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>

  7. Verifique se a opção Configurar regras de firewall para habilitar o acesso ao serviço de destino está selecionada.

  8. Clique no botão Avançar: Examinar + Criar.

  9. 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!

  1. No portal do Azure, acesse Aplicativos na instância dos Aplicativos Spring do Azure.
    1. 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.
    2. Selecione todo-service para obter mais informações sobre o microsserviço.
  2. 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}]

Verificar seus conhecimentos

1.

Para implantar um microsserviço Spring Boot nos Aplicativos Spring do Azure, o que você precisa alterar no aplicativo?

2.

Por padrão, como você pode acessar seu microsserviço depois que ele é implantado?