Migração do Spring Boot 3 para 4: Um Guia Estratégico para Preparar sua API para o Futuro
Sumário
- Visão Geral
- Pré-requisitos e Compatibilidade
- Principais Mudanças Introduzidas
- Fases da Migração
- Detalhamento das Quebras de Compatibilidade
- Configuração de Propriedades
- Segurança (Spring Security 7)
- Persistência (Hibernate 7 + Spring Data 2025.1)
- Testes
- Build e Ferramentas
- Conclusão
- Referências
1. Visão Geral
O Spring Boot 4.0 foi lançado em novembro de 2025 e representa a maior evolução do framework desde a mudança javax → jakarta introduzida no Spring Boot 3. Esta versão é construída sobre o Spring Framework 7 e o Jakarta EE 11, trazendo modularização completa do autoconfigure, suporte nativo a threads virtuais, versionamento de APIs REST e segurança de nulos via JSpecify.
Por que migrar?
- Suporte ao Spring Boot 3.5 encerrando: Em 30/06/2026, encerra-se o suporte Open Source. Após essa data, sem patches de segurança.
- Performance: Menor uso de memória, startup mais rápido com imagens nativas.
- Modularidade: Mais de 70 starters granulares — reduza CVEs desnecessários.
- Threads Virtuais: Suporte a Project Loom consolidado (disponível desde o 3.2, Java 21+).
- Evolução das anotações: JSpecify integrado ao nível de API do framework.
Escopo da migração
Esta é uma migração major — espere trabalho real. Não basta simplesmente alterar a versão no pom.xml ou build.gradle. As principais áreas impactadas são:
- Runtime Java (mínimo Java 17, recomendado Java 21)
- Build tool (Gradle 8.14+, Maven 3.6.3+)
- Dependências transitivas (Jackson 3, Hibernate 7, Spring Security 7)
- Propriedades de configuração renomeadas/removidas
- APIs deprecadas removidas
2. Pré-requisitos e Compatibilidade
Para o Spring Boot 4, as exigências de ambiente focam principalmente na versão do Java e nas ferramentas de build. Componentes internos (como Spring Framework 7, Jakarta EE 11 e Servlet 6.1) são resolvidos nativamente.
Requisitos Básicos
- Java: Mínimo 17, porém o recomendado é o 21 (LTS) ou superior para extrair o máximo do framework.
- Ferramentas de Build: Maven (mínimo 3.6.3, recomendado 3.9+) ou Gradle (mínimo 8.14, recomendado 9.x).
- GraalVM (opcional): Versão 25+ caso vá compilar imagens nativas.
Nota: Não é necessário mapear individualmente as versões dos módulos (como Spring Security 7.0, Spring Data 2025.1, etc.). Como de praxe, o BOM (spring-boot-dependencies) do Spring Boot 4 gerencia o alinhamento de todas as bibliotecas oficiais do ecossistema automaticamente.
⚠️ Atenção — Ecossistema de terceiros: Bibliotecas externas (Spring Cloud, starters customizados, integrações proprietárias) podem ainda não ser compatíveis com Spring Boot 4. Audite todas as dependências antes de iniciar a migração.
3. Principais Mudanças Introduzidas
3.1 Modularização completa
O autoconfigure monolítico foi dividido em 70+ módulos focados. Isso reduz o tamanho dos artefatos e elimina dependências transitivas desnecessárias.
3.2 JSpecify e null safety
O Spring Boot 4 incorpora anotações JSpecify (@Nullable, @NonNull) em toda a API do framework, formalizando o contrato de nulos ao nível do compilador.
3.3 Suporte a Java 25 (mantendo Java 17)
Permite uso do Java 25, com retrocompatibilidade garantida para Java 17.
3.4 API Versioning nativo
Suporte built-in para versionamento de APIs REST sem necessidade de bibliotecas externas. O mecanismo utiliza o atributo version nas anotações de mapeamento já existentes (@RequestMapping, @GetMapping, etc.), com configuração via propriedades spring.mvc.apiversion.* e ApiVersionConfigurer.
Exemplo prático:
|
|
As requisições agora podem ser roteadas nativamente com base no cabeçalho Accept-Version ou parâmetros na URL, configurados via application.properties.
3.5 HTTP Service Clients aprimorados
A abstração de clientes HTTP declarativos (introduzida no Spring Boot 3.x) atinge sua maturidade no Spring Boot 4. A configuração desses clientes usando o novo RestClient exige muito menos boilerplate, facilitando integrações baseadas em interfaces puras.
Exemplo prático:
|
|
|
|
Dica: Para times migrando do antigo RestTemplate ou WebClient, o uso do RestClient acoplado às interfaces HTTP declarativas é o novo padrão ouro para chamadas externas.
3.6 Virtual Threads (Project Loom)
As threads virtuais do Java 21 já são suportadas desde o Spring Boot 3.2 (via spring.threads.virtual.enabled=true). O Spring Boot 4, construído sobre o Spring Framework 7, dá continuidade a esse suporte e melhora a compatibilidade do ecossistema — o Hibernate 7 e demais bibliotecas do stack foram testados e otimizados para compatibilidade com threads virtuais, minimizando situações de pinning de carrier threads.
4. Fases da Migração
Fase 0 — Preparação
Objetivo: Garantir que a aplicação está no estado ideal em Spring Boot 3.x antes de qualquer upgrade.
|
|
Por que isso é crítico?
O Spring Boot 3.5 foi projetado como ponte para o 4.0. Todos os itens deprecados no 3.x que foram removidos no 4.0 já emitem warnings no 3.5. Resolver esses warnings no 3.5 é muito mais seguro do que descobrir as quebras diretamente no 4.0.
Fase 1 — Atualização do Runtime Java
Objetivo: Garantir que a JVM e o toolchain estejam compatíveis.
|
|
Atualize o pom.xml:
|
|
Atualize o build.gradle:
|
|
Fase 2 — Atualização do Build Tool
Maven — pom.xml:
|
|
Gradle — build.gradle:
|
|
Se usar Gradle, atualize para Gradle 9 (mínimo 8.14).
Fase 3 — Migração de Dependências
Adicionar o migrador de propriedades (temporário):
|
|
|
|
⚠️ Remova essa dependência após concluir a migração de propriedades. Ela tem impacto de performance e não deve ir para produção.
Jackson 3 (breaking change):
O Spring Boot 4 usa Jackson 3, que muda o groupId e o namespace de pacotes: com.fasterxml.jackson passa a ser tools.jackson. Os imports no código precisam ser atualizados (exceto jackson-annotations, que mantém o groupId com.fasterxml.jackson.core e o pacote com.fasterxml.jackson.annotation).
|
|
Hibernate Processor (breaking change):
|
|
Fase 4 — Refatoração de Código
Veja o Detalhamento das Quebras de Compatibilidade para guia completo por área.
Ordem recomendada:
- Resolver erros de compilação (APIs removidas)
- Atualizar imports e pacotes renomeados
- Ajustar configurações de segurança
- Revisar queries JPA/JPQL
- Atualizar testes
Fase 5 — Validação e Testes
|
|
Fase 6 — Deploy em Produção
Se for possível adotar uma estratégia de rollback parcial para validar a nova versão, esse é o cenário ideal. Caso contrário, esteja preparado para um rollback rápido se a aplicação apresentar instabilidades inesperadas. Se você ainda não utiliza estratégias de deploy gradual, considere estudar a adoção de Blue-Green deployment ou Canary release em seu pipeline.
5. Detalhamento das Quebras de Compatibilidade
5.1 Undertow removido
O Spring Boot 4 remove o suporte ao servidor Undertow. Aplicações que usam Undertow devem migrar para Tomcat (padrão) ou Jetty.
|
|
5.2 @MockBean e @SpyBean removidos
As anotações @MockBean e @SpyBean do Spring Boot foram removidas e substituídas pelas anotações equivalentes do Spring Framework: @MockitoBean e @MockitoSpyBean. Esta é uma das quebras de compatibilidade mais comuns em suítes de teste existentes.
|
|
⚠️ Outras mudanças relacionadas a testes:
MockMvcagora exige@AutoConfigureMockMvceTestRestTemplateexige@AutoConfigureTestRestTemplatepara serem auto-configurados.
5.3 Spring Security — Mudança de defaults
O Spring Security 7 alterou comportamentos padrão que podem silenciosamente quebrar APIs REST sem mensagem de erro óbvia.
|
|
5.4 Jackson 3 — Mudanças de comportamento
Jackson 3 (incluído no Spring Boot 4) traz mudanças que podem afetar serialização/deserialização:
- Mudança de namespace:
com.fasterxml.jackson→tools.jackson(atualize os imports) - Comportamento padrão mais restritivo com tipos desconhecidos
- Mudanças em como
nullé serializado em coleções - Módulos Jackson que importavam classes internas devem ser atualizados
Anotações renomeadas pelo Spring Boot 4:
| Antes | Depois |
|---|---|
@JsonComponent |
@JacksonComponent |
@JsonMixin |
@JacksonMixin |
Jackson2ObjectMapperBuilderCustomizer |
JsonMapperBuilderCustomizer |
|
|
5.5 Starter renames (módulos renomeados)
Alguns starters foram renomeados na modularização do Boot 4. Consulte a tabela completa de dependências no site oficial.
💡 Para migração gradual, o Spring Boot 4 oferece o starter
spring-boot-starter-classic, que reúne dependências antes agrupadas nos starters monolíticos.
5.6 Outras remoções e mudanças relevantes
Além do Undertow, o Spring Boot 4 removeu suporte a:
- Spock — descontinuado no 4.0 por falta de suporte ao Groovy 5 (reintegrado no 4.1.0 com Spock 2.4+)
- Pulsar Reactive — auto-configuração removida
- Spring Session Hazelcast — agora mantido pela equipe do Hazelcast
- Spring Session MongoDB — agora mantido pela equipe do MongoDB
- Launch scripts de uber jar executável (scripts específicos de Unix)
Mudanças de comportamento padrão a observar:
- Liveness e readiness probes passam a vir habilitados por padrão
- DevTools Live Reload vem desabilitado por padrão
- Spring Retry não é mais gerenciado pelo BOM (declare a versão explicitamente se usar)
- Spring Authorization Server agora faz parte do projeto Spring Security; gerencie a versão via a propriedade
spring-security.versionem vez despring-authorization-server.version
6. Configuração de Propriedades
Use o spring-boot-properties-migrator para identificar propriedades alteradas automaticamente. Além disso, revise manualmente as configurações críticas.
Como usar o migrator
- Adicione a dependência conforme Fase 3
- Inicie a aplicação — o migrator imprime no log:
- Propriedades que foram renomeadas (migra em runtime automaticamente)
- Propriedades que foram removidas (você precisa agir manualmente)
- Corrija as propriedades no
application.properties/application.yml - Remova a dependência do migrator
7. Segurança (Spring Security 7)
7.1 OIDC e OAuth2
O Spring Security 7 atualiza a conformidade OIDC. Se sua aplicação usa autenticação OAuth2/OIDC, revise:
|
|
7.2 CORS
Revise configurações de CORS — os defaults podem ter mudado:
|
|
8. Persistência (Hibernate 7 + Spring Data 2025.1)
8.1 Hibernate 7 — Principais mudanças
O Hibernate 7 traz melhorias significativas de performance e compatibilidade com threads virtuais (usa ReentrantLock em vez de blocos synchronized).
Semantic Query Model (SQM): O Hibernate 7 otimiza queries automaticamente via SQM. Queries HQL/JPQL existentes devem funcionar, mas edge cases com queries nativas complexas devem ser testados.
Processor renomeado:
|
|
8.2 Spring Data 2025.1
O Spring Data 2025.1 muda a geração de queries derivadas:
|
|
Processamento de queries em build-time:
A partir do Spring Data 2025.1, queries são processadas em compile time por padrão. Isso melhora startup e GraalVM native, mas pode revelar erros de JPQL que antes só apareciam em runtime.
9. Testes
9.1 Migração de @MockBean / @SpyBean
A mudança mais impactante em testes é a remoção de @MockBean e @SpyBean (veja a Seção 5.2). Busque os usos no projeto inteiro antes de atualizar:
|
|
Substitua por @MockitoBean / @MockitoSpyBean (do pacote org.springframework.test.context.bean.override.mockito).
9.2 Mockito puro (sem contexto Spring)
Para testes unitários que não sobem o contexto Spring, o padrão com Mockito permanece inalterado:
|
|
9.3 Testcontainers (recomendado para integração)
O Spring Boot 4 aprimora a integração com Testcontainers:
|
|
10. Build e Ferramentas
10.1 Gradle 9
Se migrar para Gradle 9, atente para:
- APIs do Gradle que foram removidas no 9.x
- Comportamento mais estrito em cache e task configuration avoidance
- Verificação de dependências mais rigorosa
|
|
10.2 GraalVM Native Image
Para imagens nativas, atualize para GraalVM 25:
|
|
10.3 Spring Boot Docker Compose
Não esqueça de aproveitar o suporte nativo ao spring-boot-docker-compose (introduzido no SB 3.1). Ao ter um arquivo compose.yaml no projeto, o Spring Boot gerencia automaticamente o ciclo de vida dos containers (como banco de dados e mensageria) durante o desenvolvimento local.
10.4 Spring Boot 4.1
O Spring Boot 4.1 foi lançado em junho de 2026, com melhorias reativas e maior modularização do GraalVM. Ao planejar a migração, considere mirar diretamente na linha 4.1 em vez do 4.0 para já partir da versão mais recente.
11. Conclusão
A migração do Spring Boot 3 para o 4 não é apenas uma atualização técnica — é um passo estratégico para alinhar o projeto às práticas modernas de desenvolvimento.
Com suporte nativo para versionamento de APIs, melhorias de desempenho e maior integração com o ecossistema Jakarta EE, a versão 4 simplifica a manutenção e prepara o caminho para arquiteturas mais resilientes e escaláveis.
Planejar cada etapa, testar incrementalmente e documentar as mudanças são os pilares para uma transição suave. Ao final, o esforço de migração se traduz em um código mais limpo, seguro e preparado para o futuro.
Obrigado por chegar até aqui.