Use when you have a written implementation plan to execute in a separate session with review checkpoints
npx skills add adityamparikh/spring-boot-4-migration-skill
Or install specific skill: npx add-skill https://github.com/adityamparikh/spring-boot-4-migration-skill
# Description
>
# SKILL.md
name: spring-boot-4-migration
description: >
Migrate Spring Boot 3.x → 4.x and stay current across 4.x minor
versions. Covers build/starter changes, Jackson 3, Spring Security 7,
Spring Framework 7, observability (OpenTelemetry/Micrometer), property
and package relocations, testing (JUnit 6, Testcontainers 2, MockitoBean),
HTTP clients, resilience, AOT/native, and API versioning. Supports
all-at-once and gradual upgrade strategies with compatibility bridges.
Java and Kotlin; Maven and Gradle.
Trigger on: "upgrade to Spring Boot 4", "migrate to Boot 4",
"Spring Boot 4 migration", "upgrade spring boot", "gradual upgrade",
"upgrade to 4.1", "Spring Boot 4.1", "update Boot minor version",
or any request involving moving a Spring Boot 3.x project to 4.x
or upgrading between 4.x minor versions.
Spring Boot 4 Migration Skill
Migrate Spring Boot 3.x applications to 4.x and stay current across
minor versions with zero guesswork.
Scope: 3.x → 4.0 and 4.x Minor Versions
This skill covers two scenarios:
- Major migration (3.x → 4.0): The bulk of this skill — all 9 phases,
the gradual upgrade strategy, and the bridge system. - Minor version upgrades (4.0 → 4.1, 4.1 → 4.2, etc.): Tracked in
references/minor-version-changes.md. Minor versions may deprecate
APIs, remove compatibility bridges, change defaults, and introduce new
features. Check that file before bumping to any new 4.x minor version.
Prerequisites
For 3.x → 4.0 migration:
- Source project compiles and tests pass on Spring Boot 3.5.x (latest patch)
- Java 17+ is available (Java 21+ recommended, Java 25 supported)
- All deprecated API calls from Boot 3.x are resolved where possible
- If on Boot 3.4 or earlier, first upgrade to 3.5.x before proceeding
For 4.x → 4.y minor version upgrade:
- Project is on the latest patch of the current minor version (e.g., 4.0.x latest)
- Review
references/minor-version-changes.mdfor the target version - Check the official release notes for the target version
- Resolve any deprecation warnings from the current version
Choose Your Migration Strategy
Strategy 1 — Gradual Upgrade (Recommended for enterprise/large codebases)
Read references/gradual-upgrade-strategy.md FIRST. This models migration
as a dependency graph: a Day-1 baseline using compatibility bridges, then
6 independent tracks (Starters, Jackson 3, Properties, Security, Testing,
Framework 7) completed at your own pace. Key bridges:
- spring-boot-starter-classic — restores 3.x monolithic auto-configuration
- spring-boot-jackson2 — keeps Jackson 2 code working alongside Boot 4
- spring-security-access — bridges legacy AccessDecisionManager/Voter
Use this when: multiple teams, many services, phased rollouts, or when
complete Jackson 3 / Security 7 migration will take more than one sprint.
Strategy 2 — All-at-Once (below)
Execute all 9 phases sequentially in one effort. Best for greenfield
projects, small codebases, or single-team ownership.
Automated Migration with OpenRewrite
Before doing manual migration, consider using OpenRewrite recipes to
automate the mechanical changes. The Moderne platform and OpenRewrite
project provide recipes for:
- Jackson 2 → 3 package/import migration:
org.openrewrite.java.jackson.UpgradeJackson_2_3 - Spring Boot 4.x upgrade:
org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_5(prepare step), thenUpgradeSpringBoot_4_0 @MockBean→@MockitoBeanannotation replacement
Run OpenRewrite FIRST to handle bulk find-replace operations, then use
this skill's phases to address the remaining manual changes (Security DSL
rewrites, behavioral differences, property semantics, etc.).
See: https://www.moderne.ai/blog/spring-boot-4x-migration-guide
Migration Workflow (All-at-Once)
Execute these phases IN ORDER. Each phase must compile and pass tests
before proceeding to the next.
Phase 1: Build File Migration
Update Boot/Framework versions, build plugins, and replace deprecated
starters with modular equivalents. Add modular test starters for each
technology used in tests. Use classic starters as a stopgap if needed.
Read references/build-and-dependencies.md for complete starter mappings,
build plugin changes, and step-by-step instructions.
Compile check: Run mvn compile or gradle compileJava — fix any
dependency resolution errors before continuing.
Phase 2: Property Migration
Scan all application.properties, application.yml, profile-specific
variants, and @SpringBootTest(properties = ...) annotations. Rename
changed property keys (Jackson, MongoDB, session, actuator, Hibernate).
Read references/property-changes.md for the complete property mapping.
Phase 3: Jackson 3 Migration
Jackson 3 is the default in Boot 4. Migrate group IDs, packages, and
renamed Boot classes (@JsonComponent → @JacksonComponent, etc.).
Use spring-boot-jackson2 bridge as a temporary stopgap if needed.
Read references/jackson3-migration.md for complete details.
Phase 4: Package and API Relocations
Fix relocated imports (@EntityScan, BootstrapRegistry, etc.), removed
APIs (PropertyMapper.alwaysApplyingNotNull, path matching options), and
deprecated converters. Also migrate HTTP client code if applicable.
Read references/api-changes.md for the full list of relocated packages
and removed APIs.
Also read references/http-clients.md if your project uses RestClient,
WebClient, @HttpExchange, or Feign.
Phase 5: Observability Migration
Replace individual Micrometer/OTel dependencies with the consolidated
spring-boot-starter-opentelemetry starter, update OTLP properties, and
rename observability modules. Actuator is now optional for OTel export.
Read references/observability-migration.md for complete details.
Phase 6: Spring Security 7 Migration
Migrate to Security 7 DSL (lambda-only, no and()), replace removed
AuthorizationManager#check, switch to PathPatternRequestMatcher, and
update Jackson/SAML integrations. Use spring-security-access bridge if
legacy AccessDecisionManager/Voter code cannot migrate immediately.
Read references/spring-security7.md for complete details.
Phase 7: Testing Infrastructure Migration
Replace @MockBean/@SpyBean with @MockitoBean/@MockitoSpyBean
(removed, not just deprecated). Add explicit auto-configure annotations
for test HTTP clients. Migrate Testcontainers 2 module names/packages
and adopt JUnit 6. Add modular test starters for each technology.
Read references/testing-migration.md for complete details.
Phase 8: Spring Framework 7 Specific Changes
Address JSpecify nullability (Kotlin impact), deprecated AntPathMatcher,
MVC XML config removal, SpringExtension scope changes, Hibernate 7.1
entity mapping changes, and Spring Retry → Framework core retry migration.
Read references/spring-framework7.md for complete details.
Also read references/resilience-migration.md if your project uses
Spring Retry, @Retryable, @ConcurrencyLimit, or Resilience4j.
Optionally read references/api-versioning.md for new API versioning
capabilities introduced in Framework 7.
Phase 9: Final Verification
Run the verification script if available, otherwise manually check:
mvn clean verifyorgradle clean build— full compile + tests- Verify application starts:
mvn spring-boot:runorgradle bootRun - Check actuator health:
curl localhost:8080/actuator/health - Verify liveness/readiness probes (now enabled by default)
- Check structured logging output format
- Run integration tests against each active Spring profile
- Verify Docker image builds if using buildpacks or Jib
Optionally read references/aot-native.md if you plan to adopt AOT
processing, GraalVM native images, or the new AOT cache feature.
Minor Version Upgrades (4.0 → 4.1, 4.1 → 4.2, etc.)
When upgrading between Spring Boot 4.x minor versions, follow this process:
1. Check What Changed
Read references/minor-version-changes.md for the target version. Also
consult the official release notes:
- https://github.com/spring-projects/spring-boot/wiki (Release Notes per version)
- https://docs.spring.io/spring-boot/upgrading.html
2. Bridge Removal Awareness
Minor versions are where compatibility bridges get removed. Before
upgrading, check whether any bridges you depend on are being dropped:
| Bridge | Introduced | Expected Removal |
|---|---|---|
spring-boot-jackson2 |
4.0 | 4.1 or 4.2 |
spring-boot-starter-classic |
4.0 | 5.0 |
spring-boot-starter-test-classic |
4.0 | 5.0 |
| Deprecated starter names | 4.0 | 5.0 |
If you are still using a bridge that is being removed in the target
version, complete the corresponding migration track BEFORE upgrading.
3. Upgrade Process
- Update the Spring Boot version in your build file to the target
minor version's latest patch release. - Run
mvn compile/gradle compileJava— fix any new compilation errors. - Run the full test suite — fix any test failures.
- Review deprecation warnings in both build output and application logs.
These signal what will break in the NEXT minor version. - Run
verify_migration.shto confirm migration state.
4. New Features
Each minor version introduces new features and auto-configurations.
These are opt-in and don't require action, but you may want to adopt
them. Check the "New and Noteworthy" section of each release's notes.
Troubleshooting
Common Compilation Errors
| Error | Cause | Fix |
|---|---|---|
ClassNotFoundException: ...autoconfigure... |
Modular starters needed | Add specific spring-boot-starter-X |
NoSuchMethodError: PropertyMapper.alwaysApplyingNotNull |
API removed | Use always() instead |
Cannot resolve symbol JsonComponent |
Renamed | Use @JacksonComponent |
Package com.fasterxml.jackson does not exist |
Jackson 3 packages | Change to tools.jackson |
Cannot resolve symbol MockBean |
Deprecated/removed | Use @MockitoBean |
ClassNotFoundException: RestClientBuilderCustomizer |
Elasticsearch change | Use Rest5ClientBuilderCustomizer |
Quick Fixes
- If build won't compile at all after version bump, use
spring-boot-starter-classicandspring-boot-starter-test-classicto get running, then incrementally migrate to modular starters. Seereferences/gradual-upgrade-strategy.mdfor the full Day-1 baseline. - If Jackson 3 migration is blocking, add
spring-boot-jackson2temporarily. This is a first-class bridge — see Track B in the gradual strategy. - If Spring Security changes are extensive, add
spring-security-accessbridge and upgrade to Security 6.5 preparation steps first (they provide opt-out flags for 7.0 breaking changes). See Track D in the gradual strategy. - For enterprise rollouts across many services, use the Wave 1-4 approach in
references/gradual-upgrade-strategy.mdto minimize blast radius.
Reference File Index
| File | When to read |
|---|---|
references/gradual-upgrade-strategy.md |
FIRST — migration dependency graph, bridges, independent tracks, enterprise rollout |
references/build-and-dependencies.md |
Phase 1 / Track A — full starter mapping tables, build plugin changes |
references/property-changes.md |
Phase 2 / Track C — all property key renames and value changes |
references/jackson3-migration.md |
Phase 3 / Track B — Jackson 3 packages, APIs, compatibility mode |
references/api-changes.md |
Phase 4 — package relocations, removed APIs, renamed classes |
references/observability-migration.md |
Phase 5 — OpenTelemetry starter, OTLP properties, module renames, Actuator decoupling |
references/spring-security7.md |
Phase 6 / Track D — Security 7 breaking changes and DSL migration |
references/testing-migration.md |
Phase 7 / Track E — MockBean, Testcontainers 2, JUnit 6, RestTestClient |
references/spring-framework7.md |
Phase 8 / Track F — Framework 7 changes, JSpecify, path matching |
references/http-clients.md |
HTTP clients — RestClient, WebClient, @HttpExchange, Feign migration, RestTestClient |
references/api-versioning.md |
API versioning — strategies, semantic ranges, client-side, deprecation, testing |
references/resilience-migration.md |
Resilience — Spring Retry → Framework 7, @Retryable, @ConcurrencyLimit, Resilience4j |
references/aot-native.md |
AOT/Native — BeanRegistrar, RuntimeHints, Spring Data AOT, GraalVM 25, AOT Cache |
references/minor-version-changes.md |
4.x minor upgrades — changes per minor version, bridge removals, new features |
scripts/verify_migration.sh |
Phase 9 — bridge-aware verification with PASS/FAIL/WARN/BRIDGE |
Official Sources
Cross-reference with these authoritative resources:
- GA Announcement: https://spring.io/blog/2025/11/20/spring-boot-4-0-0-available-now
- Migration Guide: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Migration-Guide
- Release Notes: https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Release-Notes
- Upgrading Docs: https://docs.spring.io/spring-boot/upgrading.html
- Jackson 3 in Spring: https://spring.io/blog/2025/10/07/introducing-jackson-3-support-in-spring/
- OpenRewrite Recipes: https://www.moderne.ai/blog/spring-boot-4x-migration-guide
- Road to GA blog series: https://spring.io/blog/2025/09/02/road_to_ga_introduction
- Dan Vega walkthrough: https://www.danvega.dev/blog/spring-boot-4-is-here
- Dan Vega sample project: https://github.com/danvega/sb4
# README.md
Spring Boot 4 Migration Skill
A comprehensive Claude Code skill for migrating Spring Boot 3.x applications to Spring Boot 4.x and staying current across 4.x minor versions.
What This Skill Does
When installed, this skill gives Claude Code deep knowledge of every breaking change in Spring Boot 4.x and guides you through migration step-by-step. It supports:
- Two migration strategies: All-at-once (9 sequential phases) or gradual upgrade (Day-1 baseline with 6 independent tracks)
- Compatibility bridges:
spring-boot-starter-classic,spring-boot-jackson2,spring-security-accessfor incremental adoption - Minor version tracking: Bridge removal timelines, deprecation promotions, and new features for 4.1, 4.2, and beyond
- Comprehensive coverage: Build files, modular starters, Jackson 3, properties, package relocations, Spring Security 7, testing (MockitoBean, Testcontainers 2, JUnit 6), Spring Framework 7, Hibernate 7.1, observability (OpenTelemetry, Micrometer, Actuator), API versioning, HTTP interfaces and clients, AOT/native image, JSpecify nullability, resilience (retry, concurrency limiting)
- Verification script: Bridge-aware PASS/FAIL/WARN/BRIDGE checks
- Enterprise rollout: Wave-based strategy for organizations with many services
Installation
Claude Code CLI
claude install-skill github:adityamparikh/spring-boot-4-migration-skill
Manual Installation
Copy the contents of this repository to ~/.claude/skills/spring-boot-4-migration/.
Usage
In Claude Code, say any of:
- "Migrate this project to Spring Boot 4"
- "Upgrade to Spring Boot 4"
- "Spring Boot 4 migration"
- "Gradual upgrade to Boot 4"
- "Upgrade to Spring Boot 4.1"
- "Update Boot minor version"
The skill will activate automatically and guide you through the migration.
Repository Structure
SKILL.md # Main skill definition (phases, workflow, troubleshooting)
references/
gradual-upgrade-strategy.md # Dependency graph, bridges, independent tracks, enterprise rollout
build-and-dependencies.md # Full modular starter mapping (70+ starters), build plugin changes
property-changes.md # All property key renames and value changes
jackson3-migration.md # Jackson 3 packages, APIs, compatibility mode, OpenRewrite
api-changes.md # Package relocations, removed APIs, renamed classes
spring-security7.md # Security 7 breaking changes, DSL migration, request matchers
testing-migration.md # MockitoBean, Testcontainers 2, JUnit 6, RestTestClient
spring-framework7.md # JSpecify, path matching, resilience, Hibernate 7.1
observability-migration.md # OpenTelemetry, Micrometer, OTLP, Actuator decoupling
http-clients.md # RestClient, WebClient, @HttpExchange, Feign migration
api-versioning.md # Native API versioning strategies, semantic ranges, testing
resilience-migration.md # Spring Retry → Framework 7, @Retryable, @ConcurrencyLimit
aot-native.md # AOT processing, BeanRegistrar, RuntimeHints, GraalVM 25
minor-version-changes.md # 4.x minor version changes, bridge removals, upgrade checklists
scripts/
verify_migration.sh # Bridge-aware verification (PASS/FAIL/WARN/BRIDGE)
Official Sources
This skill is cross-referenced against:
- Spring Boot 4.0.0 GA Announcement
- Spring Boot 4.0 Migration Guide
- Spring Boot 4.0 Release Notes
- Upgrading Spring Boot
- Jackson 3 Support in Spring
- Moderne OpenRewrite Migration Guide
- Road to GA Blog Series
- Dan Vega — Spring Boot 4 Is Here
- Dan Vega — sb4 Sample Project
FAQ
Do I need to specify sub-agents?
No. This is a single, self-contained skill — no sub-agents or additional agent
configuration is required. The "6 independent tracks" mentioned in the gradual
upgrade strategy are conceptual work areas that teams can tackle in parallel,
not separate agents. Install the skill and Claude Code uses it as one unit.
License
Apache 2.0
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.