Este projeto é uma demonstração de arquitetura de microsserviços desenvolvida com Spring Boot, contendo múltiplos módulos, segurança HTTPS/SSL, banco de dados relacional (PostgreSQL), conteinerização com Docker e integração com ferramentas de qualidade (JaCoCo e SonarQube).
O repositório é um projeto multi-módulo contendo três componentes principais:
graph TD
A[Módulo: commons] -->|Dependência Maven| C[Módulo: microservico2]
B[Módulo: microservico1] -->|Acessa| DB[(PostgreSQL: banco)]
C -->|Acessa| DB
subgraph Docker Network
B
C
DB
end
- commons: Biblioteca compartilhada que contém classes e modelos comuns utilizados por outros microsserviços.
- microservico1: Microsserviço responsável pela entidade
Usere pela persistência de dados em banco de dados PostgreSQL. - microservico2: Microsserviço de citações (Citations) que consome o módulo
commonse possui integrações com SonarQube e Jacoco.
- Java 21 / Java 17 (commons)
- Spring Boot 3.1.0 (Spring Web, Spring Data JPA, Actuator, DevTools)
- Lombok (para redução de código boilerplate)
- PostgreSQL (banco de dados relacional)
- Docker & Docker Compose (para orquestração de containers)
- JaCoCo (Plugin de cobertura de código para testes unitários)
- SonarQube (Análise de qualidade de código e segurança)
- Thunder Client / Postman (Testes de APIs REST)
Ambos os microsserviços estão configurados para operar sob protocolo seguro HTTPS através de um certificado SSL embutido em um arquivo keystore (keystore.p12 no formato PKCS12).
- Senha do KeyStore:
springboot - Alias do Certificado:
tomcat
Certifique-se de ter instalado em sua máquina:
- JDK 21
- Maven 3.8+
- Docker & Docker Compose
Como o microservico2 possui dependência direta do módulo commons, você precisa empacotar e instalar o commons no seu repositório local do Maven (.m2):
cd commons
mvn clean install
cd ..Gere os arquivos .jar de ambos os serviços:
# Empacotar microservico1
cd microservico1
mvn clean package -DskipTests
cd ..
# Empacotar microservico2
cd microservico2
mvn clean package -DskipTests
cd ..O arquivo docker-compose.yaml irá subir o banco de dados PostgreSQL e os dois microsserviços.
Execute na raiz do projeto:
docker compose up --build- Banco de Dados (PostgreSQL): Porta
5432no host local. - microservico1 (doiscontainers-1): Porta interna
443(HTTPS) mapeada para a porta443externa. - microservico2 (doiscontainers-2): Porta interna
443(HTTPS) mapeada para a porta444externa.
Você pode utilizar a coleção de requisições do Thunder Client inclusa em thunder-collection_SpringMicroserviceDemo.json.
- URL:
https://localhost:443/user?fn=michael&ln=mora - Método:
GET - Resposta Esperada:
{ "id": 1, "firstName": "michaelmichael", "lastName": "moramora" }
- URL:
https://localhost:444/citation - Método:
GET - Resposta Esperada: Retorna uma citação inspiradora aleatória em formato texto.
Nota: Ao acessar por HTTPS no navegador ou ferramentas locais, será necessário aceitar o certificado autoassinado.
O microservico2 possui configurações específicas de qualidade:
Rode o comando a seguir no diretório do microservico2:
cd microservico2
mvn clean testOs relatórios de cobertura do JaCoCo estarão disponíveis em: target/site/jacoco/index.html.
Inicie um servidor local do SonarQube na porta 9000 e rode a análise:
mvn sonar:sonarAs propriedades e tokens de acesso estão pré-configurados nos arquivos sonar-project.properties e pom.xml.
A pipeline automatizada do projeto está configurada em .github/workflows/ci-cd.yml e é acionada em commits nas branches de desenvolvimento, staging e master/main, além de pull requests.
A pipeline é composta por 3 estágios (Jobs):
graph LR
A[Build & Test] -->|Sucesso| B[Build Docker Images]
B -->|Se branch for 'staging'| C[Deploy to Staging]
- Executa a compilação completa com o JDK 21.
- Roda os testes unitários de todos os microsserviços.
- Armazena relatórios JUnit e cobertura do JaCoCo como artefatos da build.
- Compila os JARs de produção de cada microsserviço.
- Cria imagens Docker multi-plataforma e as publica no GitHub Container Registry (GHCR) com a tag
lateste o hash do commit (sha). - Acionado apenas em branches produtivas e de staging (
master,mainestaging).
- Acionado automaticamente ao fazer push para a branch
staging. - Realiza o deploy e inicialização dos microsserviços localmente no GitHub Actions Runner utilizando Docker Compose.
- Executa testes de fumaça (smoke test) utilizando
curlnos endpoints locais.