framework-spring-boot
Fornece padrões de engenharia e arquitetura para aplicações corporativas com Spring Boot 3.x+, cobrindo Spring MVC REST, injeção de dependências por construtor, DTOs imutáveis (Records), Virtual Threa
SKILL.mdskills/framework/framework-spring-boot/SKILL.md
GitHubSpring Boot Server Engineering & Best Practices
Esta skill estabelece os padrões e regras de engenharia de software para aplicações corporativas e microsserviços desenvolvidos com Spring Boot 3.x+ e Java moderno (Java 17/21/25).
🧭 1. Princípios Arquiteturais e de Projeto
- Separação Limpa de Camadas:
- Manter anotações do framework nos pontos de entrada (REST Controllers), configuração e adaptadores de infraestrutura.
- Evitar acoplamento de classes de domínio com anotações de serialização ou persistência sempre que possível.
- Injeção de Dependências Idiomática:
- Usar estritamente injeção via construtor com campos
final. Evitar@Autowireddireto em campos (dificulta testes e acopla a classe ao container de DI). - Injetar interfaces ou beans especializados em vez de classes de implementação diretas.
- Usar estritamente injeção via construtor com campos
- Imutabilidade e DTOs Modernos:
- Usar Java
recordpara todos os Data Transfer Objects (Requests e Responses), garantindo imutabilidade e validação estruturada com Jakarta Bean Validation (@Valid,@NotNull,@NotBlank, etc.).
- Usar Java
⚡ 2. Performance, Concorrência e Virtual Threads
- Virtual Threads (Project Loom): Em Spring Boot 3.2+, habilitar
spring.threads.virtual.enabled=truepara o servidor Tomcat embutido e tarefas assíncronas bloqueadas em I/O. - Evitar Pinning: Em rotas que utilizam Virtual Threads, auditar o uso de
synchronizedsubstituindo porReentrantLockem blocos com chamadas de rede ou banco de dados. - Spring Data JPA: Evitar consultas N+1 utilizando
JOIN FETCH,@EntityGraphou projeções DTO dedicadas.
🧪 3. Estratégia de Testes
- Testes Unitários Rápidos: Testar serviços e regras de negócio sem carregar o contexto do Spring (
MockitoExtension, instanciando a classe diretamente). - Testes Focados de Camada: Usar
@WebMvcTestpara validar endpoints REST, filtros de segurança e serialização Jackson sem inicializar o banco de dados. - Testes de Integração com Testcontainers: Usar
@SpringBootTestcom Testcontainers para instâncias reais de PostgreSQL, MySQL ou Redis.