Pular para conteúdo

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

  1. Anotações OpenAPI: @Tag e @Operation documentam os endpoints automaticamente na interface do Swagger UI.
  2. Validação com @Valid: Garante que anotações como @NotNull e @Positive no DTO sejam checadas antes de atingir o serviço.
  3. 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