Migrate to Spring Boot 4.0
Recipe ID
io.moderne.java.spring.boot4.UpgradeSpringBoot_4_0Artifact
io.moderne.recipe:rewrite-springMigrate applications to the latest Spring Boot 4.0 release. This recipe will modify an application's build files, make changes to deprecated/preferred APIs, and migrate configuration settings that have changes between versions. This recipe will also chain additional framework migrations (Spring Framework, Spring Data, etc) that are required as part of the migration to Spring Boot 4.0.
Usage
This recipe has no required configuration options. You’ll need the Moderne CLI configured before running the command below.
mod run . --recipe io.moderne.java.spring.boot4.UpgradeSpringBoot_4_0If the recipe isn’t available locally, install it with:
mod config recipes jar install io.moderne.recipe:rewrite-spring:0.39.0Definition
This recipe runs the following recipes in order.
- Add managed Maven dependency
org.openrewrite.maven.AddManagedDependency - Migrate to Spring Boot 3.5
io.moderne.java.spring.boot3.UpgradeSpringBoot_3_5 - Convert auto-configuration
excludetoexcludeNameorg.openrewrite.java.spring.ConvertAutoConfigurationExcludeToExcludeName - Migrate to Spring Cloud 2025.1
org.openrewrite.java.spring.cloud2025.UpgradeSpringCloud_2025_1 - Migrate from
spring-cloud-contract-wiremocktowiremock-spring-bootio.moderne.java.spring.cloud.contract.MigrateWireMockToWireMockSpringBoot - Migrate to Spring Framework 7.0
io.moderne.java.spring.framework7.UpgradeSpringFramework_7_0 - Migrate to Spring Security 7.0
org.openrewrite.java.spring.security7.UpgradeSpringSecurity_7_0 - Migrate to Spring Batch 6.0 from 5.2
org.openrewrite.java.spring.batch.SpringBatch5To6Migration - Use constructor injection for
StoredProcedureItemReaderio.moderne.java.spring.batch.MigrateStoredProcedureItemReaderConstructor - Add comment to method invocations
org.openrewrite.java.AddCommentToMethodInvocations - Add comment to method invocations
org.openrewrite.java.AddCommentToMethodInvocations - Change type
org.openrewrite.java.ChangeType - Change type
org.openrewrite.java.ChangeType - Add
setJobRegistry(..)to manually configuredTaskExecutorJobOperatorio.moderne.java.spring.batch.AddJobRegistryToTaskExecutorJobOperator - Add
@EnableJdbcJobRepositoryalongside@EnableBatchProcessingio.moderne.java.spring.batch.AddEnableJdbcJobRepository - Flag deprecated
ChunkListenercallbacks for manual migration toChunkListener<I, O>io.moderne.java.spring.batch.FlagChunkListenerForManualMigration - Migrate Spring Boot properties to 4.0
org.openrewrite.java.spring.boot4.SpringBootProperties_4_0 - Replace
@MockBeanand@SpyBeanorg.openrewrite.java.spring.boot4.ReplaceMockBeanAndSpyBean - Migrate to Hibernate 7.2.x
io.moderne.hibernate.MigrateToHibernate72 - Migrate to testcontainers-java 2.x
org.openrewrite.java.testing.testcontainers.Testcontainers2Migration - Upgrade to SpringDoc 3.0
org.openrewrite.java.springdoc.UpgradeSpringDoc_3_0 - Upgrade Gradle or Maven dependency versions
org.openrewrite.java.dependencies.UpgradeDependencyVersion - Upgrade Gradle or Maven dependency versions
org.openrewrite.java.dependencies.UpgradeDependencyVersion - Upgrade Maven plugin version
org.openrewrite.maven.UpgradePluginVersion - Upgrade Maven parent project version
org.openrewrite.maven.UpgradeParentVersion - Update a Gradle plugin by id
org.openrewrite.gradle.plugins.UpgradePluginVersion - Update Gradle wrapper
org.openrewrite.gradle.UpdateGradleWrapper - Update a Gradle plugin by id
org.openrewrite.gradle.plugins.UpgradePluginVersion - Upgrade Maven plugin version
org.openrewrite.maven.UpgradePluginVersion - Upgrade Gradle or Maven dependency versions
org.openrewrite.java.dependencies.UpgradeDependencyVersion - Migrate
@AutoConfigureMockMvcHtmlUnit attributes to nested@HtmlUnitio.moderne.java.spring.boot4.MigrateAutoConfigureMockMvcHtmlUnit - Co-exclude
UserDetailsServiceAutoConfigurationwhereSecurityAutoConfigurationis excludedio.moderne.java.spring.boot4.AddUserDetailsServiceAutoConfigurationExclusion - Migrate to Spring Boot 4.0 modular starters
org.openrewrite.java.spring.boot4.MigrateToModularStarters - Rename Spring Boot 4.0 starters with managed versions
org.openrewrite.java.spring.boot4.RenameDeprecatedStartersManagedVersions - Change Gradle or Maven dependency
org.openrewrite.java.dependencies.ChangeDependency - Change Gradle or Maven dependency
org.openrewrite.java.dependencies.ChangeDependency - Change Gradle or Maven dependency
org.openrewrite.java.dependencies.ChangeDependency - Change Gradle or Maven dependency
org.openrewrite.java.dependencies.ChangeDependency - Change Gradle or Maven dependency
org.openrewrite.java.dependencies.ChangeDependency - Remove a Gradle or Maven dependency
org.openrewrite.java.dependencies.RemoveDependency - Change Gradle or Maven dependency
org.openrewrite.java.dependencies.ChangeDependency - Upgrade Gradle or Maven dependency versions
org.openrewrite.java.dependencies.UpgradeDependencyVersion - Upgrade Gradle or Maven dependency versions
org.openrewrite.java.dependencies.UpgradeDependencyVersion - Change Gradle or Maven dependency
org.openrewrite.java.dependencies.ChangeDependency - Upgrade Gradle or Maven dependency versions
org.openrewrite.java.dependencies.UpgradeDependencyVersion - Add
@AutoConfigureTestRestTemplateif necessaryorg.openrewrite.java.spring.boot4.AddAutoConfigureTestRestTemplate - Add
@AutoConfigureWebTestClientif necessaryorg.openrewrite.java.spring.boot4.AddAutoConfigureWebTestClient - Spring Security 7 modularization
io.moderne.java.spring.security7.ModularizeSpringSecurity7 - Sync Gradle ext properties with BOM
org.openrewrite.gradle.SyncGradleExtPropertiesWithBom - Migrate Spring Cloud properties to 2025.1
io.moderne.java.spring.cloud20251.SpringCloudProperties_2025_1 - Upgrade Gradle or Maven dependency versions
org.openrewrite.java.dependencies.UpgradeDependencyVersion - Migrate Spring Cloud AWS (awspring) to 4.0
io.moderne.java.spring.boot4.UpgradeAwspringCloud_4_0 - Upgrade MyBatis to Spring Boot 4.0
io.moderne.java.spring.boot4.UpgradeMyBatisToSpringBoot_4_0 - Migrate Spring Retry to Spring Resilience
io.moderne.java.spring.boot4.MigrateSpringRetry - Add explicit version for REST Assured
io.moderne.java.spring.boot4.MigrateRestAssured - Upgrade Gradle or Maven dependency versions
org.openrewrite.java.dependencies.UpgradeDependencyVersion - Change type
org.openrewrite.java.ChangeType - Find and replace
org.openrewrite.text.FindAndReplace - Change type
org.openrewrite.java.ChangeType - Find and replace
org.openrewrite.text.FindAndReplace - Change type
org.openrewrite.java.ChangeType - Find and replace
org.openrewrite.text.FindAndReplace - Change type
org.openrewrite.java.ChangeType - Find and replace
org.openrewrite.text.FindAndReplace - Change type
org.openrewrite.java.ChangeType - Find and replace
org.openrewrite.text.FindAndReplace - Change type
org.openrewrite.java.ChangeType - Find and replace
org.openrewrite.text.FindAndReplace - Change type
org.openrewrite.java.ChangeType - Find and replace
org.openrewrite.text.FindAndReplace - Upgrade to Java 21 when using jOOQ
io.moderne.java.spring.boot4.UpgradeToJava21WhenUsingJooq - Migrate to Jakarta EE 11
org.openrewrite.java.migrate.jakarta.JakartaEE11 - Migrate to JSpecify
org.openrewrite.java.jspecify.MigrateToJSpecify - Change type
org.openrewrite.java.ChangeType - Change type
org.openrewrite.java.ChangeType - Migrate from Elasticsearch 8 to 9
io.moderne.elastic.elastic9.MigrateToElasticsearch9 - Migrate to Kafka 4.1
io.moderne.kafka.MigrateToKafka41 - Migrate
DefaultResponseErrorHandler.handleErrormethod signatureio.moderne.java.spring.framework.MigrateDefaultResponseErrorHandler - Migrate
handleErrormethod invocations to new signatureio.moderne.java.spring.framework.MigrateHandleErrorMethodInvocations - Remove path extension content negotiation methods
io.moderne.java.spring.framework.RemovePathExtensionContentNegotiation - Migrate deprecated path mapping options
io.moderne.java.spring.framework.RemoveDeprecatedPathMappingOptions - Remove deprecated
setPathMatcher()callsio.moderne.java.spring.framework.RemoveSetPathMatcherCall - Migrate
HttpHeadersmethods removed whenMultiValueMapcontract was droppedio.moderne.java.spring.framework.MigrateHttpHeadersMultiValueMapMethods - Add
@MockitoSettings(strictness = Strictness.LENIENT)for@MockitoBeantestsio.moderne.java.spring.boot4.AddLenientMockitoSettings - Add
@AutoConfigureMockMvcto@SpringBootTestclasses usingMockMvcio.moderne.java.spring.boot4.AddAutoConfigureMockMvc - Add MongoDB representation properties for UUID and BigDecimal
io.moderne.java.spring.boot4.AddMongoDbRepresentationProperties - Replace deprecated
org.springframework.boot.autoconfigure.mongoAPIio.moderne.java.spring.boot4.ReplaceDeprecatedAutoconfigureMongoApi - Replace deprecated
DockerApiio.moderne.java.spring.boot4.ReplaceDeprecatedDockerApi - Replace deprecated RequestMatcherProvider with new API
io.moderne.java.spring.boot4.ReplaceDeprecatedRequestMatcherProvider - Replace deprecated
ThreadPoolTaskSchedulerBuilderconstructorio.moderne.java.spring.boot4.ReplaceDeprecatedThreadPoolTaskSchedulerBuilderApi - Replace removed
RedisCacheConfiguration.getTtl()io.moderne.java.spring.boot4.ReplaceRedisCacheConfigurationGetTtl - Remove
HttpMessageConvertersAutoConfigurationreferencesio.moderne.java.spring.boot4.RemoveHttpMessageConvertersAutoConfigurationReferences - Migrate
PropertyMapperAPI for Spring Boot 4.0io.moderne.java.spring.boot4.MigratePropertyMapper - Add
useDefaultJaasConfig=trueto MSSQL Kerberos JDBC URLsio.moderne.java.spring.boot4.AddMssqlKerberosJaasConfig - Replace Kotlin property assignment with setter call
io.moderne.java.spring.kotlin.ReplaceKotlinPropertyAssignmentWithSetterCall - Replace Kotlin property assignment with setter call
io.moderne.java.spring.kotlin.ReplaceKotlinPropertyAssignmentWithSetterCall - Replace Kotlin property assignment with setter call
io.moderne.java.spring.kotlin.ReplaceKotlinPropertyAssignmentWithSetterCall - Replace Kotlin property assignment with setter call
io.moderne.java.spring.kotlin.ReplaceKotlinPropertyAssignmentWithSetterCall - Replace Kotlin property assignment with setter call
io.moderne.java.spring.kotlin.ReplaceKotlinPropertyAssignmentWithSetterCall - Replace Kotlin property assignment with setter call
io.moderne.java.spring.kotlin.ReplaceKotlinPropertyAssignmentWithSetterCall - Replace Kotlin property assignment with setter call
io.moderne.java.spring.kotlin.ReplaceKotlinPropertyAssignmentWithSetterCall - Replace Kotlin property assignment with setter call
io.moderne.java.spring.kotlin.ReplaceKotlinPropertyAssignmentWithSetterCall - Replace Kotlin property assignment with setter call
io.moderne.java.spring.kotlin.ReplaceKotlinPropertyAssignmentWithSetterCall - Change type
org.openrewrite.java.ChangeType - Find and replace
org.openrewrite.text.FindAndReplace - Change type
org.openrewrite.java.ChangeType - Change type
org.openrewrite.java.ChangeType - Flag deprecated ReactorNettyHttpClientMapper for migration
io.moderne.java.spring.boot4.FlagDeprecatedReactorNettyHttpClientMapper - Change type
org.openrewrite.java.ChangeType - Change type
org.openrewrite.java.ChangeType - Change type
org.openrewrite.java.ChangeType - Change type
org.openrewrite.java.ChangeType - Change type
org.openrewrite.java.ChangeType - Change type
org.openrewrite.java.ChangeType - Change type
org.openrewrite.java.ChangeType - Change type
org.openrewrite.java.ChangeType - Change type
org.openrewrite.java.ChangeType - Rename Maven property key
org.openrewrite.maven.RenamePropertyKey - Change a Gradle plugin version by id
org.openrewrite.gradle.plugins.ChangePluginVersion - Rename package name
org.openrewrite.java.ChangePackage - Rename package name
org.openrewrite.java.ChangePackage - Change type
org.openrewrite.java.ChangeType - Change type
org.openrewrite.java.ChangeType - Add
spring-boot-starter-validationdependencyio.moderne.java.spring.boot4.AddValidationStarterDependency - Add Jackson2 for Jersey using JSON
io.moderne.java.spring.boot4.AddJackson2ForJerseyJson - Adopt Jackson 3
io.moderne.java.spring.boot4.AdoptJackson3 - Migrate
JsonFactoryDecoratortoTokenStreamFactoryBuilderDecoratorio.moderne.java.spring.boot4.MigrateJsonFactoryDecorator - Remove
ContentNegotiationConfigurer.favorPathExtension()callsio.moderne.java.spring.boot4.RemoveContentNegotiationFavorPathExtension - Migrate Spring Session Hazelcast to Hazelcast Spring Session
io.moderne.java.spring.boot4.MigrateHazelcastSpringSession - Remove Spring Pulsar Reactive support
io.moderne.java.spring.boot4.RemoveSpringPulsarReactive - Remove
ZipkinAutoConfigurationio.moderne.java.spring.boot4.RemoveZipkinAutoConfigurationExclude - Remove
SslBundlesparameter fromKafkaPropertiesbuild methodsio.moderne.java.spring.boot4.RemoveKafkaPropertiesSslBundlesParameter - Migrate to Spring Boot 4.0 modular starters
io.moderne.java.spring.boot4.MigrateToModularStarters - Remove redundant explicit dependencies and versions
org.openrewrite.gradle.RemoveRedundantDependencyVersions - Remove redundant explicit dependency and plugin versions
org.openrewrite.maven.RemoveRedundantDependencyVersions - Remove
loaderImplementationfrom Gradleio.moderne.java.spring.boot4.RemoveGradleUberJarLoaderImplementationConfig - Remove XML tag
org.openrewrite.xml.RemoveXmlTag
Data tables
Structured output this recipe can produce.
- Maven metadata failuresAttempts to resolve maven metadata that failed.
org.openrewrite.maven.table.MavenMetadataFailures - Source files that had resultsSource files that were modified by the recipe run.
org.openrewrite.table.SourcesFileResults - Source files that had search resultsSearch results that were found during the recipe run.
org.openrewrite.table.SearchResults - Source files that errored on a recipeThe details of all errors produced by a recipe run.
org.openrewrite.table.SourcesFileErrors - Recipe performanceStatistics used in analyzing the performance of recipes.
org.openrewrite.table.RecipeRunStats