Migrate in controlled stages. Keep behavior changes separate from the framework upgrade.
Establish the baseline
- Upgrade to the latest Boot 3.5 maintenance release.
- Run unit, slice, integration, startup, and migration tests before changing the major version.
- Remove Boot 3 deprecations and record all explicitly versioned dependencies.
- Compare the Boot 3.5 and Boot 4 dependency-management reports.
- Verify Spring Cloud and other portfolio release-train compatibility independently.
Prepare for Boot 4
- Require Java 17 or newer; prefer Java 21 for application builds.
- Replace
javax.*remnants with Jakarta APIs before the upgrade. - Remove Undertow assumptions; Boot 4 requires a Servlet 6.1-compatible container.
- Inventory Jackson 2 custom modules, serializers,
ObjectMapperbeans, and package imports. - Inventory test annotations, especially
@MockBean,@SpyBean, and implicit MockMvc setup. - Add
spring-boot-properties-migratortemporarily after changing the Boot version, then remove it.
Migrate dependencies deliberately
Boot 4 is more modular. Prefer dedicated starters over relying on incidental transitive dependencies. Expect dedicated starters for web MVC, security tests, Flyway/Liquibase, and technology-specific tests. Use the classic starters only as a temporary diagnostic bridge, never as the final dependency model.
Verify the result
- Run the application with every supported profile.
- Exercise schema migration against a production-like database copy.
- Verify JSON contracts, security failures, pagination, and error responses.
- Confirm actuator exposure, logging, metrics, and tracing behavior.
- Remove the properties migrator and all classic starters before declaring the migration complete.
Examples
- See
examples/good-migration-plan.mdfor a staged migration. - See
examples/bad-migration-plan.mdfor a risky one-step upgrade.
Gotchas
- Agent jumps from an old Boot 3 minor directly to Boot 4 - upgrade to current 3.5 first.
- Agent changes framework versions and business behavior together - isolate the migration diff.
- Agent assumes all Boot 3 starters keep the same names and transitive dependencies - audit each one.
- Agent leaves
spring-boot-properties-migratorin production - remove it after configuration cleanup. - Agent treats passing compilation as completion - verify runtime wiring, JSON, security, and tests.