Criar um microsserviço Spring Boot

Concluído

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.

  1. Navegue até sua instância do Azure Spring Apps.

  2. Selecione Aplicações.

  3. Selecione a aplicação todo-service.

  4. Selecione Service Connector e, em seguida, escolha + Criar.

    1. Para Tipo de serviço, selecione DB 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 de cliente.
    7. Selecione o botão Next: Authentication .
  5. Na página Autenticação, verifique se a opção Cadeia de conexão está selecionada.

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

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

  8. Clique em Seguinte: Rever + Criar.

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

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

Verifique o seu conhecimento

1.

Para implantar um microsserviço Spring Boot no Azure Spring Apps, o que você precisa alterar em seu aplicativo?

2.

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