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, versioning de APIs REST e segurança de nulos via JSpecify.
Por que migrar?
| Motivo | Detalhe |
|---|---|
| Suporte ao SB 3.5 encerra em nov/2026 | 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 |
| Thread Virtual | Suporte nativo ao Project Loom (Java 21+) |
| Segurança de Nulos | JSpecify integrado ao nível de API do framework |
| LTS até 2030 | Menor necessidade de migrações frequentes |
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
Versões obrigatórias
| Componente | Versão Mínima | Versão Recomendada |
|---|---|---|
| Java | 17 | 21 (LTS) ou 25 |
| Spring Framework | 7.x | 7.x |
| Jakarta EE | 11 | 11 |
| Servlet | 6.1 | 6.1 |
| Maven | 3.6.3 | 3.9+ |
| Gradle | 8.14 | 9.x |
| Kotlin | 2.2 | 2.2+ |
| GraalVM native-image | 25 | 25+ |
Módulos do ecossistema Spring compatíveis com Boot 4
| Módulo | Versão no Boot 4 |
|---|---|
| Spring Framework | 7.0 |
| Spring Security | 7.0 |
| Spring Data | 2025.1 |
| Spring Batch | 6.0 |
| Spring AMQP | 4.0 |
| Spring Integration | 7.0 |
| Spring for Apache Kafka | 4.0 |
| Spring GraphQL | 2.0 |
| Spring Session | 4.0 |
| Spring WS | 5.0 |
| Spring REST Docs | 4.0 |
⚠️ 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.
3.5 HTTP Service Clients aprimorados
Melhorias significativas na abstração de clientes HTTP declarativos.
3.6 Virtual Threads (Project Loom)
Suporte nativo para threads virtuais do Java 21, com configuração simplificada e sem necessidade de WebFlux para cargas de trabalho I/O-bound.
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 possui mudanças de pacote. Dependências que importam classes Jackson diretamente precisam de revisão.
|
|
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 possível fazer uma estratégia de rollback parcial para validar a versão, ótimo! Se não esteja preparado para rollback rápido caso as coisas se comportem mal… Se ainda não tem estratégias de deploy separadas vale conferir como implementar Blue-Green deployment ou Canary release na sua estrutura atual :)
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 JUnit 4 removido
O suporte ao JUnit 4 foi completamente removido. Todos os testes devem usar JUnit 5 (Jupiter).
|
|
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:
- 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
|
|
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.
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.1 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 Remoção do JUnit 4
Busque e substitua anotações JUnit 4 no projeto inteiro:
|
|
9.2 @MockBean e @SpyBean
Verifique se mudanças no contexto de teste afetam o comportamento de mocks:
|
|
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
compileeruntimeconfigurations removidas (useimplementation/runtimeOnly)- Verificação de dependências mais rigorosa
|
|
10.2 GraalVM Native Image
Para imagens nativas, atualize para GraalVM 25:
|
|
10.3 Spring Boot 4.1?
O Spring Boot 4.1 já está disponível, com melhorias reativas e maior modularização do GraalVM. Mantenha o roadmap em vista ao planejar upgrades futuros.
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