Aula 20 - Projeto Capstone: Microsserviço Java Spring Boot Completo 🏆
Objetivo Pedagógico
Objetivo: Construção de um microsserviço corporativo autônomo em Java 21 com Spring Boot 3, persistência com PostgreSQL, segurança JWT, cache com Redis e documentação OpenAPI.
📑 1. Fundamentos Teóricos & Análise Técnica
O Projeto Capstone de Especialização em Backend Java consolida o ciclo de desenvolvimento corporativo completo da plataforma Java moderna. O estudante é desafiado a implementar um Microsserviço de Gestão de Faturas e Liquidação Financeira, concebido para suportar altos requisitos de conformidade, segurança e desempenho.
O projeto avalia as seguintes implementações de engenharia: 1. Java 21 e Spring Boot 3: Aproveitamento de recursos contemporâneos da linguagem (Virtual Threads com Projeto Loom, Records, Pattern Matching). 2. Arquitetura em Camadas com Clean Architecture: Isolamento claro entre controllers, camada de serviços, DTOs imutáveis e repositórios JPA. 3. Segurança com Spring Security 6: Proteção stateless baseada em tokens JWT com autorização por papéis (@RolesAllowed). 4. Resiliência e Observabilidade: Métricas operacionais expostas via Spring Boot Actuator e documentação interativa via SpringDoc OpenAPI.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
Client["Cliente / Sistema Integrador"] --> Security["Spring Security 6 (JWT Filter)"]
Security --> Controller["InvoiceController (REST / OpenAPI)"]
Controller --> Service["InvoiceService (Regras de Domínio)"]
Service --> Cache["Redis Cache (Consultas)"]
Service --> Repo["InvoiceRepository (Spring Data JPA)"]
Repo --> DB["Banco de Dados PostgreSQL"]
Service --> Events["ApplicationEventPublisher (Eventos Assíncronos)"]
style Client fill:#e1f5fe,stroke:#01579b
style Security fill:#fff3e0,stroke:#e65100
style Service fill:#e8f5e9,stroke:#2e7d32
style DB fill:#f3e5f5,stroke:#7b1fa2 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Virtual Threads do Java 21: Ativação de spring.threads.virtual.enabled=true para processamento concorrente massivo de I/O. - Padrão DTO Rigoroso: Entidades de banco de dados nunca são expostas diretamente nos endpoints REST. - Métricas de Telemetria: Exposição de endpoints de saúde (/actuator/health) e métricas Prometheus (/actuator/prometheus). - Contêineres com Docker: Geração de imagens conteinerizadas prontas para deploy em orquestradores Kubernetes.
🛠️ 2. Implementação Prática em Java 21, Spring Boot 3, PostgreSQL e Docker
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// InvoiceController.java (Controlador REST com Documentação OpenAPI)
package com.empresa.core.controller;
import com.empresa.core.dto.InvoiceRequestDTO;
import com.empresa.core.dto.InvoiceResponseDTO;
import com.empresa.core.service.InvoiceService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/v1/invoices")
@Tag(name = "Faturas", description = "Operações de Emissão e Liquidação de Faturas")
public class InvoiceController {
private final InvoiceService invoiceService;
public InvoiceController(InvoiceService invoiceService) {
this.invoiceService = invoiceService;
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
@Operation(summary = "Emite uma nova fatura financeira", description = "Registra a fatura e dispara evento assíncrono de cobrança.")
public ResponseEntity<InvoiceResponseDTO> create(@Valid @RequestBody InvoiceRequestDTO request) {
InvoiceResponseDTO response = invoiceService.createInvoice(request);
return ResponseEntity.status(HttpStatus.CREATED).body(response);
}
}
💡 Análise Passo a Passo do Código
- Anotações OpenAPI:
@Tage@Operationdocumentam os endpoints automaticamente na interface do Swagger UI. - Validação com @Valid: Garante que anotações como
@NotNulle@Positiveno DTO sejam checadas antes de atingir o serviço. - Injeção por Construtor: Prática recomendada pela engenharia do Spring para garantir imutabilidade e facilidade de testes unitários.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto