What changed in Spring Boot from 3 to 4
6 releases numbered after v3.5.16 up to and including v4.1.1, stable releases only. v3.5.16 and v4.1.1 are the newest stable releases of 3 and 4 we track; this page follows them as new ones ship.
- 1 removes or deprecates something
- Spans branches 4.1, 4.0 — the list is by date, and a branch's own patches sit between the other's.
88 changes across 6 releases · 22 landed on more than one version
- Add public constructor to InvalidConfigurationPropertyValueException that accepts a cause
- Kafka consumer-specific security protocol is not taken into accountalso inv4.1.1
- Temporary file is not deleted when ExportedImageTar construction failsalso inv4.1.1
- spring-boot-h2-console pulls servlet-api as transitive dependencyalso inv4.1.1
- Methods that return the result of Map#remove are not declared with a @Nullable return typealso inv4.1.1
- PropertiesLauncher does not log nested archive pathsalso inv4.1.1
- JarFile is not closed when finding main class from archivealso inv4.1.1
- CloudFoundry reactive auto-configuration should not require a WebClient.Builder bean to be definedalso inv4.1.1
- Resources are not cleaned up when resolving an image that is not yet present in the builderalso inv4.1.1
- Context refresh fails on reactive Cloud Foundry when using Actuator without spring-boot-healthalso inv4.1.1
- GraphQlWebMvcAutoConfiguration should apply customizers in orderalso inv4.1.1
- Micrometer registries pin the application contextalso inv4.1.1
- Context refresh fails when using Actuator on Jersey without spring-boot-healthalso inv4.1.1
- Context refresh fails on Cloud Foundry when using Actuator without spring-boot-healthalso inv4.1.1
- IllegalStateException when binding properties to a @Validated class that contains a map whose value type is a wildcard
- Setting 'server.servlet.session.cookie.partitioned' to false still emits the 'Partitioned' cookie attribute
- Application-managed JUL bridge handler should only be removed if installedalso inv4.1.1
- Inconsistent handling of empty string values of spring.security.oauth2.resourceserver.jwt issuer-uri and jwk-set-uri
- PropertiesWebClientHttpServiceGroupConfigurer has highest precedence, preventing other configurers from being ordered ahead of it
- High number of connections due to Mongo health indicator
- NativeImageResourceProvider flattens Flyway migration paths in subdirectoriesalso inv4.1.1
- Metadata annotation processor ignores getter-level @NestedConfigurationProperty for recordsalso inv4.1.1
- Structured logging: a failed JSON encode corrupts the next log event written on the same thread
- Fix ordering of Kotlinx Serialization CodecCustomizer
- Auto-configured RedisMessageListenerContainer does not use virtual threads when spring.threads.virtual.enabled is true
- MailSender auto-configuration now enables hostname verificationalso inv4.1.0
- Artemis auto-configuration no longer uses a predictable default location for the embedded broker's dataalso inv4.1.0
- Fix NullPointerException in reactor-netty SniProvider and unmapped SSL bundle with RSocket
- SSL is no longer enabled when an SSL bundle is overridden to an empty string
- Docker Compose support now restores thread interrupt flag when catching InterruptedException
- RabbitProperties no longer enables SSL when spring.rabbitmq.ssl.bundle is overridden to an empty string
- Fix NullPointerException in reactor-netty SniProvider when SSL bundle uses client-auth or server truststore without server-name-bundles
- Test auto-configuration no longer integrates Spring Security with HtmlUnitDriveralso inv4.1.0
- Layer written outside the output location exception is no longer thrown when using extract layers in root directory
- ConfigurationPropertiesReportEndpoint no longer exposes AOP proxy internalsalso inv4.1.0
- StackTracePrinter instances now have access to the Environmentalso inv4.1.0
- MappingsEndpoint now reports the correct parentId when a parent context exists
- Buildpack module now validates long-to-int casts
- GraphQL WebSocket support now configures allowed origins
- Configuration property metadata now includes correct class references
- Spring Boot Loader now supports RSA and EC signed jarsalso inv4.1.0
- Meter registries are now removed from the global registry when the context is closed
- EndpointRequest links matcher no longer unnecessarily matches HTTP methods other than GET
- Apply HTML escaping to timestamp attribute in Whitelabel error page
- Setting server.servlet.session.cookie.partitioned=true now has effect when using Tomcat
- Embedded LDAP SSL is not enabled when its bundle is empty
- InetAddressFilter.externalAddresses now excludes special purpose addresses from RFC 6890
- NullPointerException in reactor-netty SniProvider and unmapped SSL bundle with RSocket
- SSL is not enabled when a SSL bundle is overridden to an empty string
- Configuration property metadata no longer includes incorrect class references
- Docker Compose support restores thread interrupt flag when catching InterruptedException
- RabbitProperties does not enable SSL when spring.rabbitmq.ssl.bundle is overridden to an empty string
- NullPointerException in reactor-netty SniProvider when SSL bundle uses client-auth or server truststore without server-name-bundles
- Layer written outside the output location of '//' exception is no longer thrown when using extract layers in root directory
- MappingsEndpoint reports the correct parentId when a parent context exists
- Meter registries are removed from the global registry when the context is closed
- Default security is misconfigured when spring-boot-actuator-autoconfigure is present and spring-boot-health is not
- Elasticsearch Rest5Client auto-configuration misconfigures underlying HTTP client
- ApplicationPidFileWriter does not handle symlinks correctly
- RandomValuePropertySource is not suitable for secrets
- Cassandra auto-configuration misconfigures CqlSessionBuilder
- ApplicationTemp does not handle symlinks correctly
- Remote DevTools performs comparison incorrectly
- spring.rabbitmq.ssl.verify-hostname is applied inconsistently
- Whole number values are ignored when configuring min and max expected values and SLO boundaries for a distribution summary meter
- Classic starters are missing several modules
- Module spring-boot-resttestclient is missing from spring-boot-starter-test-classic
- Annotations like @Ssl don't work on @Bean methods when using @ServiceConnection
- EnversRevisionRepositoriesRegistrar should reuse @EnableEnversRepositories rather than configuring the JPA counterpart
- WebFlux Cloud Foundry links endpoint includes query string from received request in resolved links
- Imports on a containing test class are ignored when a nested class has imports
- With spring.jackson.use-jackson2-defaults set to true, FAIL_ON_UNKNOWN_PROPERTIES is enabled
- 500 response from env endpoint when supplied pattern is invalid
- Reactive MongoDB starter has a transitive dependency on the synchronous MongoDB driver
- HTTP method is lost when configuring excludes in EndpointRequest
- Honor HttpMethod for reactive additional endpoint paths
- Test starter for Spring Integration now includes Spring Integration test module
- Sliced tests that import TransactionAutoConfiguration now also import TransactionManagerCustomizationAutoConfiguration
- WebSocket messaging's task executors and stompWebSocketHandlerMapping are now auto-configured regardless of whether Jackson is present
- WebSocket app no longer fails to start when Jackson is on the classpath but there is no JsonMapper bean
- Metadata annotation processor now respects method-level @NestedConfigurationProperty when using constructor binding
- Property overrides in external application.properties or application.yaml are no longer ignored
- NativeImageResourceProvider now finds Flyway migration scripts in subdirectories
- NettyReactiveWebServerAutoConfiguration now includes @ConditionalOnWebApplication
- @GraphQlTest now includes @ControllerAdvice
- SpringJtaPlatform is deprecated
Original release notes, newest first
The list above is our reading of these notes; the originals from Broadcom are here, one fold per release.
v4.0.8
:lady_beetle: Bug Fixes
- Kafka consumer-specific security protocol is not taken into account #51365
- Temporary file is not deleted when ExportedImageTar construction fails #51117
- spring-boot-h2-console pulls servlet-api as transitive dependency #51094
- Methods that return the result of Map#remove are not declared with a
@Nullablereturn type #50972 - PropertiesLauncher does not log nested archive paths #50968
- JarFile is not closed when finding main class from archive #50949
- CloudFoundry reactive auto-configuration should not require a WebClient.Builder bean to be defined #50928
- Resources are not cleaned up when resolving an image that is not yet present in the builder #50919
- Context refresh fails on reactive Cloud Foundry when using Actuator without spring-boot-health #50916
- GraphQlWebMvcAutoConfiguration should apply customizers in order #50908
- Micrometer registries pin the application context #50886
- Context refresh fails when using Actuator on Jersey without spring-boot-health #50858
- Context refresh fails on Cloud Foundry when using Actuator without spring-boot-health #50857
- IllegalStateException when binding properties to a
@Validatedclass that contains a map whose value type is a wildcard #50798 - Setting 'server.servlet.session.cookie.partitioned' to false still emits the 'Partitioned' cookie attribute #50781
- Application-managed JUL bridge handler should only be removed if installed #50779
- Inconsistent handling of empty string values of spring.security.oauth2.resourceserver.jwt issuer-uri and jwk-set-uri #50755
- PropertiesWebClientHttpServiceGroupConfigurer has highest precedence, preventing other configurers from being ordered ahead of it #50737
- High number of connections due to Mongo health indicator #50734
- Return type nullability of ApplicationContextAssert's getBean methods does not indicate that bean may be null #50701
- NativeImageResourceProvider flattens Flyway migration paths in subdirectories #50433
- Fix ordering of Kotlinx Serialization CodecCustomizer #50428
- Metadata annotation processor ignores getter-level
@NestedConfigurationPropertyfor records #50096
:notebook_with_decorative_cover: Documentation
- spring.profiles.group should have a 'spring-profile-name' hint provider #51273
- Remove reference to removed InfluxDB auto-configuration #51172
- Use JacksonJsonSerde in Kafka Streams documentation #51152
- Document alternatives to HttpMessageConverters #51124
- Caching documentation refers to AutoConfigureCache by its pre-4.0 package #51111
- Metadata for spring.test.mockmvc.htmlunit.url declares the wrong type #51110
- Fix examples in Metadata Format documentation chapter #51097
- Improve discoverability of the AOT Cache How-to guides #50996
- Table of auto-configured HealthIndicators lists the wrong key for MongoHealthIndicator #50931
- Update OpenTelemetryResourceAttributes documentation #50867
- Fix
@Valueplaceholder syntax in external config docs #50859 - Refer to spring-boot-starter-webmvc, not deprecated spring-boot-starter-web #50842
- Fix forwarded headers property in cloud deployment docs #50841
- Fix duplicate word typos in documentation #50738
:hammer: Dependency Upgrades
- Upgrade to CycloneDX Maven Plugin 2.9.3 #51178
- Upgrade to DB2 JDBC 12.1.5.0 #50977
- Upgrade to Elasticsearch Client 9.2.9 #51366
- Upgrade to Groovy 5.0.8 #51179
- Upgrade to Hibernate 7.2.24.Final #51180
- Upgrade to Jackson 2 Bom 2.21.5 #50980
- Upgrade to Jackson Bom 3.1.5 #50981
- Upgrade to Jetty 12.1.12 #51298
- Upgrade to jOOQ 3.19.37 #51299
- Upgrade to JSpecify 1.0.1 #51181
- Upgrade to Log4j2 2.25.5 #50984
- Upgrade to Logback 1.5.38 #50985
- Upgrade to MariaDB 3.5.10 #51182
- Upgrade to Maven Help Plugin 3.5.2 #50987
- Upgrade to Micrometer 1.16.7 #51235
- Upgrade to Micrometer Tracing 1.6.7 #51236
- Upgrade to Netty 4.2.17.Final #51300
- Upgrade to Postgresql 42.7.13 #50989
- Upgrade to R2DBC MariaDB 1.3.1 #50990
- Upgrade to R2DBC MSSQL 1.0.5.RELEASE #50991
- Upgrade to R2DBC MySQL 1.4.3 #51183
- Upgrade to R2DBC Postgresql 1.1.2.RELEASE #50992
- Upgrade to Reactor Bom 2025.0.7 #51237
- Upgrade to Spring AMQP 4.0.5 #51238
- Upgrade to Spring Batch 6.0.5 #51239
- Upgrade to Spring Data Bom 2025.1.7 #51355
- Upgrade to Spring Framework 7.0.9 #51240
- Upgrade to Spring GraphQL 2.0.5 #51241
- Upgrade to Spring HATEOAS 3.0.5 #51356
- Upgrade to Spring Integration 7.0.6 #51242
- Upgrade to Spring Kafka 4.0.7 #51243
- Upgrade to Spring LDAP 4.0.5 #51244
- Upgrade to Spring Pulsar 2.0.7 #51327
- Upgrade to Spring Security 7.0.7 #51245
- Upgrade to Spring Session 4.0.5 #51246
- Upgrade to Tomcat 11.0.24 #50993
- Upgrade to UnboundID LDAPSDK 7.0.5 #50994
- Upgrade to WebJars Locator Lite 1.1.4 #50995
- Upgrade to Yasson 3.0.5 #51301
:heart: Contributors
Thank you to all the contributors who worked on this release:
@DragonFSKY, @LordKay-sudo, @MacAlsandair, @SJvaca30, @SebTardif, @codingkiddo, @dhruv-15-03, @dlwldnjs1009, @dmitrysulman, @doehyunbaek, @filiphr, @msridhar, @ngocnhan-tran1996, @nosan, @quaff, @scordio, @seonwooj0810, @vipi-n, @vvzvvv, @wantaekchoi, @xfocus3, and @yamamoto-ehhMH
v4.1.1
:warning: Attention Required
- Spring Boot's Gradle plugin no longer automatically configures gRPC when the Protobuf plugin is applied. This behavior caused problems for those using Protobuf without gRPC. To opt in to the configuration of gRPC, configure the
protobufextension with thegrpcplugin using an empty block. The Spring Boot Gradle plugin will then automatically configure the use ofprotoc-gen-grpc-javaas before. #50822
:lady_beetle: Bug Fixes
- Kafka consumer-specific security protocol is not taken into account #51369
- Structured logging: a failed JSON encode corrupts the next log event written on the same thread #51156
- Micrometer registries pin the application context #51135
- Temporary file is not deleted when ExportedImageTar construction fails #51132
- Metadata annotation processor ignores getter-level
@NestedConfigurationPropertyfor records #51098 - spring-boot-h2-console pulls servlet-api as transitive dependency #51095
- PropertiesLauncher does not log nested archive paths #51089
- Methods that return the result of Map#remove are not declared with a
@Nullablereturn type #51087 - NativeImageResourceProvider flattens Flyway migration paths in subdirectories #50964
- Fix ordering of Kotlinx Serialization CodecCustomizer #50961
- JarFile is not closed when finding main class from archive #50959
- Application-managed JUL bridge handler should only be removed if installed #50950
- CloudFoundry reactive auto-configuration should not require a WebClient.Builder bean to be defined #50944
- Context refresh fails on reactive Cloud Foundry when using Actuator without spring-boot-health #50942
- Resources are not cleaned up when resolving an image that is not yet present in the builder #50941
- GraphQlWebMvcAutoConfiguration should apply customizers in order #50914
- Auto-configured RedisMessageListenerContainer does not use virtual threads when spring.threads.virtual.enabled is true #50884
- Context refresh fails when using Actuator on Jersey without spring-boot-health #50872
- Context refresh fails on Cloud Foundry when using Actuator without spring-boot-health #50871
- IllegalStateException when binding properties to a
@Validatedclass that contains a map whose value type is a wildcard #50856 - High number of connections due to Mongo health indicator #50852
- Inconsistent handling of empty string values of spring.security.oauth2.resourceserver.jwt issuer-uri and jwk-set-uri #50849
- Return type nullability of ApplicationContextAssert's getBean methods does not indicate that bean may be null #50845
- PropertiesWebClientHttpServiceGroupConfigurer has highest precedence, preventing other configurers from being ordered ahead of it #50843
- Exposing gRPC test server port should backoff if gRPC is not present #50825
- JpaBaseConfiguration#entityManagerConfiguration can cause a dependency loop on beans declaring AsyncTaskExecutor #50801
- spring.grpc.server.health.include-overall-health is not taken into account #50799
- Setting 'server.servlet.session.cookie.partitioned' to false still emits the 'Partitioned' cookie attribute #50790
- Managed version of Prometheus Client is not aligned with Micrometer's micrometer-registry-prometheus #50780
- Map properties bound from empty strings fail with ConverterNotFoundException #50773
- Protobuf Common Protos should not be a managed dependency #50772
- An application that depends on spring-boot-security-oauth2-resource-server may fail to start with a ClassNotFoundException when Reactor is on the classpath but WebFlux is not #50764
- W3CHeaderParser's decoding is not compliant with RFC 3986 #50650
:notebook_with_decorative_cover: Documentation
- Description of spring.graphql.websocket.connection-init-timeout does not render correctly in the reference guide #51348
- spring.profiles.group should have a 'spring-profile-name' hint provider #51284
- Remove reference to removed InfluxDB auto-configuration #51176
- Use JacksonJsonSerde in Kafka Streams documentation #51161
- Document alternatives to HttpMessageConverters #51129
- Fix stale type reference for OTLP logging transport metadata #51119
- Metadata for spring.test.mockmvc.htmlunit.url declares the wrong type #51115
- Caching documentation refers to AutoConfigureCache by its pre-4.0 package #51113
- Fix examples in Metadata Format documentation chapter #51102
- Improve discoverability of the AOT Cache How-to guides #51000
- Table of auto-configured HealthIndicators lists the wrong key for MongoHealthIndicator #50940
- Update OpenTelemetryResourceAttributes documentation #50874
- Fix
@Valueplaceholder syntax in external config docs #50873 - Polish gRPC documentation #50863
- Fix duplicate word typos in documentation #50850
- Fix forwarded headers property in cloud deployment docs #50848
- Refer to spring-boot-starter-webmvc, not deprecated spring-boot-starter-web #50847
- Fix documentation inconsistencies #50800
- Add Spring gRPC properties to Common Application Properties referrence #50789
- Document OTLP SSL service connections #50782
- Update docs for changes to optional property binding and JPA repositories bootstrap mode #50759
:hammer: Dependency Upgrades
- Upgrade to ActiveMQ 6.2.9 #51329
- Upgrade to Byte Buddy 1.18.11 #51003
- Upgrade to CycloneDX Maven Plugin 2.9.3 #51185
- Upgrade to DB2 JDBC 12.1.5.0 #51005
- Upgrade to Elasticsearch Client 9.4.5 #51368
- Upgrade to Groovy 5.0.8 #51186
- Upgrade to Grpc Java 1.81.1 #51263
- Upgrade to Grpc Java 1.83.1 #51361
- Upgrade to Hibernate 7.4.5.Final #51007
- Upgrade to Hibernate Validator 9.1.3.Final #51187
- Upgrade to HttpClient5 5.6.4 #51330
- Upgrade to HttpCore5 5.4.3 #51010
- Upgrade to Jackson 2 Bom 2.21.5 #51011
- Upgrade to Jackson Bom 3.1.5 #51012
- Upgrade to Jetty 12.1.12 #51302
- Upgrade to jOOQ 3.21.7 #51303
- Upgrade to JSpecify 1.0.1 #51189
- Upgrade to Log4j2 2.25.5 #51015
- Upgrade to Logback 1.5.38 #51016
- Upgrade to MariaDB 3.5.10 #51190
- Upgrade to Maven Help Plugin 3.5.2 #51018
- Upgrade to Maven Jar Plugin 3.5.1 #51191
- Upgrade to Micrometer 1.17.1 #51251
- Upgrade to Micrometer Tracing 1.7.1 #51252
- Upgrade to MongoDB 5.8.1 #51360
- Upgrade to Native Build Tools Plugin 1.1.4 #50947
- Upgrade to Native Build Tools Plugin 1.1.8 #51304
- Upgrade to Netty 4.2.17.Final #51305
- Upgrade to Oracle Database 23.26.3.0.0 #51193
- Upgrade to Pooled JMS 3.2.3 #51196
- Upgrade to Postgresql 42.7.13 #51022
- Upgrade to Protobuf Java 4.35.1 #51264
- Upgrade to Protobuf Maven Plugin 5.1.8 #51331
- Upgrade to Pulsar 4.2.4 #51306
- Upgrade to R2DBC MariaDB 1.4.1 #51024
- Upgrade to R2DBC MSSQL 1.0.5.RELEASE #51025
- Upgrade to R2DBC MySQL 1.4.3 #51194
- Upgrade to R2DBC Postgresql 1.1.2.RELEASE #51026
- Upgrade to Reactor Bom 2025.0.7 #51253
- Upgrade to Spring AMQP 4.1.1 #51254
- Upgrade to Spring Batch 6.0.5 #51255
- Upgrade to Spring Data Bom 2026.0.1 #51357
- Upgrade to Spring Framework 7.0.9 #51256
- Upgrade to Spring GraphQL 2.0.5 #51257
- Upgrade to Spring gRPC 1.1.1 #51171
- Upgrade to Spring HATEOAS 3.1.2 #51358
- Upgrade to Spring Integration 7.1.1 #51258
- Upgrade to Spring Kafka 4.1.1 #51259
- Upgrade to Spring LDAP 4.1.1 #51260
- Upgrade to Spring Pulsar 2.0.7 #51328
- Upgrade to Spring Security 7.1.1 #51261
- Upgrade to Spring Session 4.1.1 #51262
- Upgrade to SQLite JDBC 3.53.2.1 #51195
- Upgrade to Tomcat 11.0.24 #51027
- Upgrade to UnboundID LDAPSDK 7.0.5 #51028
- Upgrade to WebJars Locator Lite 1.1.4 #51029
- Upgrade to Yasson 3.0.5 #51307
:heart: Contributors
Thank you to all the contributors who worked on this release:
@DragonFSKY, @LordKay-sudo, @MacAlsandair, @SJvaca30, @SebTardif, @SimonVerhoeven, @codingkiddo, @dhruv-15-03, @dlwldnjs1009, @dmitrysulman, @doehyunbaek, @filiphr, @msridhar, @ngocnhan-tran1996, @nosan, @ns3154, @quaff, @scordio, @seonwooj0810, @skdas20, @vipi-n, @vvzvvv, @wantaekchoi, @xfocus3, and @yamamoto-ehhMH
v4.0.7
:lady_beetle: Bug Fixes
- MailSender auto-configuration does not enable hostname verification #50746
- Artemis auto-configuration uses a predictable default location for the embedded broker's data #50744
- NullPointerException in reactor-netty SniProvider and unmapped SSL bundle with RSocket #50640
- SSL should not be enabled when a SSL bundle is overridden to an empty string #50634
- Docker Compose support does not restore thread interrupt flag when catching InterruptedException #50617
- RabbitProperties enables SSL even when spring.rabbitmq.ssl.bundle is overridden to an empty string #50611
- NullPointerException in reactor-netty SniProvider when SSL bundle uses client-auth or server truststore without server-name-bundles #50609
- Test auto-configuration no longer integrates Spring Security with HtmlUnitDriver #50602
- Layer written outside the output location of '//' exception is thrown when using extract layers in root directory #50509
- ConfigurationPropertiesReportEndpoint exposes AOP proxy internals #50416
- Created StackTracePrinter instances have no access to the Environment #50413
- MappingsEndpoint reports the context's own ID as parentId when a parent exists #50411
- Buildpack module does not validate long-to-int casts #50409
- GraphQL WebSocket support does not configure allowed origins #50393
- Configuration property metadata includes incorrect class references #50375
- Spring Boot Loader Does Not Support RSA and EC Signed Jars #50297
- Meter registries are not removed from the global registry when the context is closed #50286
- Nullable annotations from AbstractErrorController.getErrorAttributes are not aligned with implementation #50265
- EndpointRequest links matcher unnecessarily matches HTTP methods other than GET #50260
- Actuator's '/cloudfoundryapplication' endpoint does not work if restrictive CORS configuration is provided using a bean named corsConfigurationSource #50257
- ThreadPoolTaskScheduleBuilder unnecessarily loses precision when configuring await termination time #50233
- NimbusJwtDecoder silently accepts unknown values for spring.security.oauth2.resourceserver.jwt.jws-algorithms #50227
- Apply HTML escaping to timestamp attribute in Whitelabel error page #50215
- Setting server.servlet.session.cookie.partitioned=true has no effect when using Tomcat #50201
:notebook_with_decorative_cover: Documentation
- Fix reference to Gradle documentation for module replacement #50646
- Document SSL reloading with Let's Encrypt #50629
- Remove the use of Optional from Data Neo4j repository examples #50621
- Fix typos in documentation #50619
- Clarify dependency requirement for Bean Validation support #50613
- Document Java 25 requirement for AOT cache #50484
- Add links for Java CAS Client Spring Boot Starter #50281
- Document known testcontainers lifecycle issues #50219
- Document adding multiple connectors for Jetty #50217
- Polish InvalidConfigurationPropertyValueException constructor javadoc #50213
- Fix typo in Spring Security OAuth2 client registration documentation #50198
:hammer: Dependency Upgrades
- Upgrade to Caffeine 3.2.4 #50322
- Upgrade to Cassandra Driver 4.19.3 #50681
- Upgrade to Glassfish JAXB 4.0.9 #50682
- Upgrade to Groovy 5.0.6 #50324
- Upgrade to Hibernate 7.2.19.Final #50733
- Upgrade to Jackson 2 Bom 2.21.4 #50684
- Upgrade to Jackson Bom 3.1.4 #50685
- Upgrade to Jakarta Json Bind 3.0.2 #50686
- Upgrade to Jakarta XML Bind 4.0.5 #50328
- Upgrade to Jaxen 2.0.6 #50717
- Upgrade to Jetty 12.1.10 #50688
- Upgrade to Jetty Reactive HTTPClient 4.1.5 #50718
- Upgrade to jOOQ 3.19.35 #50719
- Upgrade to Liquibase 5.0.3 #50554
- Upgrade to Logback 1.5.34 #50689
- Upgrade to Maven Enforcer Plugin 3.6.3 #50555
- Upgrade to Maven Failsafe Plugin 3.5.6 #50690
- Upgrade to Maven Surefire Plugin 3.5.6 #50691
- Upgrade to Micrometer 1.16.6 #50535
- Upgrade to Micrometer Tracing 1.6.6 #50536
- Upgrade to Neo4j Java Driver 6.1.0 #50556
- Upgrade to Netty 4.2.15.Final #50692
- Upgrade to Postgresql 42.7.11 #50332
- Upgrade to R2DBC MySQL 1.4.2 #50333
- Upgrade to Reactor Bom 2025.0.6 #50537
- Upgrade to SAAJ Impl 3.0.6 #50720
- Upgrade to SLF4J 2.0.18 #50558
- Upgrade to Spring AMQP 4.0.4 #50538
- Upgrade to Spring Batch 6.0.4 #50539
- Upgrade to Spring Data Bom 2025.1.6 #50540
- Upgrade to Spring Framework 7.0.8 #50541
- Upgrade to Spring GraphQL 2.0.4 #50740
- Upgrade to Spring HATEOAS 3.0.4 #50542
- Upgrade to Spring Integration 7.0.5 #50543
- Upgrade to Spring Kafka 4.0.6 #50544
- Upgrade to Spring LDAP 4.0.4 #50545
- Upgrade to Spring Pulsar 2.0.6 #50546
- Upgrade to Spring RESTDocs 4.0.1 #50547
- Upgrade to Spring Security 7.0.6 #50548
- Upgrade to Spring Session 4.0.4 #50549
- Upgrade to Spring WS 5.0.2 #50550
- Upgrade to Tomcat 11.0.22 #50335
:heart: Contributors
Thank you to all the contributors who worked on this release:
@Abdlatif-nabgha, @DragonFSKY, @Kapil-chn7, @Kimgyuilli, @SJvaca30, @SebTardif, @ares333, @codingkiddo, @dlwldnjs1009, @henriquejsza, @igormukhin, @johnnypwong, @kwondh5217, @leestana01, @mheath, @mmoayyed, @msridhar, @ngocnhan-tran1996, @nosan, @quaff, @scordio, @vinhhieu21, @won-seoop, and @zxuhan
v4.1.0
Full release notes for Spring Boot 4.1 are available on the wiki.
:star: New Features
- Add public constructor to InvalidConfigurationPropertyValueException that accepts a cause #50211
- Reduce memory consumption when repeatedly calling WritableJson.toByteArray #49428
:lady_beetle: Bug Fixes
- MailSender auto-configuration does not enable hostname verification #50747
- Artemis auto-configuration uses a predictable default location for the embedded broker's data #50745
- Embedded LDAP SSL should not be enabled when its bundle is empty #50700
- InetAddressFilter.externalAddresses does not exclude special purpose addresses from RFC 6890 #50668
- NullPointerException in reactor-netty SniProvider and unmapped SSL bundle with RSocket #50645
- SSL should not be enabled when a SSL bundle is overridden to an empty string #50635
- Test auto-configuration no longer integrates Spring Security with HtmlUnitDriver #50633
- Configuration property metadata includes incorrect class references #50632
- Docker Compose support does not restore thread interrupt flag when catching InterruptedException #50618
- RabbitProperties enables SSL even when spring.rabbitmq.ssl.bundle is overridden to an empty string #50612
- NullPointerException in reactor-netty SniProvider when SSL bundle uses client-auth or server truststore without server-name-bundles #50610
- SpringJtaPlatform should have been deprecated since 4.1.0-M3 #50592
- Layer written outside the output location of '//' exception is thrown when using extract layers in root directory #50510
- ConfigurationPropertiesReportEndpoint exposes AOP proxy internals #50417
- Created StackTracePrinter instances have no access to the Environment #50414
- MappingsEndpoint reports the context's own ID as parentId when a parent exists #50412
- Buildpack module does not validate long-to-int casts #50410
- Gradle gRPC support fails if protobuf-java dependency is used instead of protobuf-java-util #50405
- GraphQL WebSocket support does not configure allowed origins #50394
- Spring Boot Loader Does Not Support RSA and EC Signed Jars #50298
- Meter registries are not removed from the global registry when the context is closed #50287
- DataSourceBuilder cannot derive a DataSource from a lazy connection proxy #50271
- Nullable annotations from AbstractErrorController.getErrorAttributes are not aligned with implementation #50266
- Bean definitions can be added with an initializer before setAllowBeanDefinitionOverriding is called #50264
- EndpointRequest links matcher unnecessarily matches HTTP methods other than GET #50261
- Actuator's '/cloudfoundryapplication' endpoint does not work if restrictive CORS configuration is provided using a bean named corsConfigurationSource #50258
- ThreadPoolTaskScheduleBuilder unnecessarily loses precision when configuring await termination time #50234
- NimbusJwtDecoder silently accepts unknown values for spring.security.oauth2.resourceserver.jwt.jws-algorithms #50228
- Missing dependency management for spring-boot-web-server-test #50224
- Spring Batch support for MongoDB modules are not included in dependency management #50223
- Apply HTML escaping to timestamp attribute in Whitelabel error page #50216
- GrpcServerHealthScheduler is not started in servlet environments #50209
- Setting server.servlet.session.cookie.partitioned=true has no effect when using Tomcat #50204
:notebook_with_decorative_cover: Documentation
- Fix reference to Gradle documentation for module replacement #50647
- Document SSL reloading with Let's Encrypt #50630
- Remove the use of Optional from Data Neo4j repository examples #50622
- Fix typos in documentation #50620
- Clarify dependency requirement for Bean Validation support #50614
- Document Java 25 requirement for AOT cache #50485
- Add links for Java CAS Client Spring Boot Starter #50285
- Document known testcontainers lifecycle issues #50220
- Document adding multiple connectors for Jetty #50218
- Polish InvalidConfigurationPropertyValueException constructor javadoc #50214
- Fix typo in Spring Security OAuth2 client registration documentation #50199
:hammer: Dependency Upgrades
- Upgrade to ActiveMQ 6.2.6 #50652
- Upgrade to Byte Buddy 1.18.10 #50693
- Upgrade to Caffeine 3.2.4 #50338
- Upgrade to Cassandra Driver 4.19.3 #50654
- Upgrade to Couchbase Client 3.11.3 #50576
- Upgrade to Elasticsearch Client 9.4.2 #50655
- Upgrade to Glassfish JAXB 4.0.9 #50656
- Upgrade to Groovy 5.0.6 #50340
- Upgrade to Hibernate 7.4.1.Final #50732
- Upgrade to Infinispan 16.1.4 #50342
- Upgrade to Jackson 2 Bom 2.21.4 #50657
- Upgrade to Jackson Bom 3.1.4 #50658
- Upgrade to Jakarta Json Bind 3.0.2 #50659
- Upgrade to Jakarta XML Bind 4.0.5 #50345
- Upgrade to Jaxen 2.0.6 #50710
- Upgrade to Jetty 12.1.10 #50661
- Upgrade to Jetty Reactive HTTPClient 4.1.5 #50711
- Upgrade to jOOQ 3.21.5 #50712
- Upgrade to Kafka 4.2.1 #50662
- Upgrade to Kotlin 2.3.21 #50347
- Upgrade to Lettuce 7.5.2.RELEASE #50581
- Upgrade to Liquibase 5.0.3 #50582
- Upgrade to Logback 1.5.34 #50663
- Upgrade to Maven Enforcer Plugin 3.6.3 #50583
- Upgrade to Maven Failsafe Plugin 3.5.6 #50664
- Upgrade to Maven Surefire Plugin 3.5.6 #50665
- Upgrade to Micrometer 1.17.0 #50559
- Upgrade to Micrometer Tracing 1.7.0 #50560
- Upgrade to MongoDB 5.8.0 #50608
- Upgrade to Native Build Tools Plugin 1.1.1 #50585
- Upgrade to Neo4j Java Driver 6.1.0 #50586
- Upgrade to Netty 4.2.15.Final #50666
- Upgrade to OpenTelemetry 1.62.0 #50588
- Upgrade to Oracle Database 23.26.2.0.0 #50667
- Upgrade to Postgresql 42.7.11 #50349
- Upgrade to Protobuf Java 4.34.2 #50590
- Upgrade to Protobuf Maven Plugin 5.1.4 #50589
- Upgrade to Pulsar 4.2.2 #50713
- Upgrade to R2DBC MySQL 1.4.2 #50351
- Upgrade to Reactor Bom 2025.0.6 #50561
- Upgrade to SAAJ Impl 3.0.6 #50714
- Upgrade to SLF4J 2.0.18 #50591
- Upgrade to Spring AMQP 4.1.0 #50562
- Upgrade to Spring Batch 6.0.4 #50563
- Upgrade to Spring Data Bom 2026.0.0 #50564
- Upgrade to Spring Framework 7.0.8 #50565
- Upgrade to Spring GraphQL 2.0.4 #50741
- Upgrade to Spring gRPC 1.1.0 #50566
- Upgrade to Spring HATEOAS 3.1.1 #50567
- Upgrade to Spring Integration 7.1.0 #50568
- Upgrade to Spring Kafka 4.1.0 #50569
- Upgrade to Spring LDAP 4.1.0 #50570
- Upgrade to Spring Pulsar 2.0.6 #50571
- Upgrade to Spring RESTDocs 4.0.1 #50572
- Upgrade to Spring Security 7.1.0 #50573
- Upgrade to Spring Session 4.1.0 #50574
- Upgrade to Spring WS 5.0.2 #50575
- Upgrade to SQLite JDBC 3.53.2.0 #50715
- Upgrade to Tomcat 11.0.22 #50354
:heart: Contributors
Thank you to all the contributors who worked on this release:
@Abdlatif-nabgha, @DragonFSKY, @Kapil-chn7, @Kimgyuilli, @SJvaca30, @SebTardif, @ares333, @codingkiddo, @dlwldnjs1009, @eddumelendez, @henriquejsza, @igormukhin, @johnnypwong, @kwondh5217, @leestana01, @mheath, @mmoayyed, @msridhar, @ngocnhan-tran1996, @nosan, @quaff, @scordio, @vinhhieu21, @vpavic, @won-seoop, and @zxuhan
v4.0.6
:lady_beetle: Bug Fixes
- Default security is misconfigured when spring-boot-actuator-autoconfigure is present and spring-boot-health is not #50188
- Elasticsearch Rest5Client auto-configuration misconfigures underlying HTTP client #50187
- ApplicationPidFileWriter does not handle symlinks correctly #50185
- RandomValuePropertySource is not suitable for secrets #50183
- Cassandra auto-configuration misconfigures CqlSessionBuilder #50180
- ApplicationTemp does not handle symlinks correctly #50178
- Remote DevTools performs comparison incorrectly #50176
- spring.rabbitmq.ssl.verify-hostname is applied inconsistently #50174
- Whole number values are ignored when configuring min and max expected values and SLO boundaries for a distribution summary meter #50077
- Classic starters are missing several modules #50071
- Module spring-boot-resttestclient is missing from spring-boot-starter-test-classic #50069
- Annotations like
@Ssldon't work on@Beanmethods when using@ServiceConnection#50064 - EnversRevisionRepositoriesRegistrar should reuse
@EnableEnversRepositoriesrather than configuring the JPA counterpart #50039 - WebFlux Cloud Foundry links endpoint includes query string from received request in resolved links #50017
- Imports on a containing test class are ignored when a nested class has imports #50012
- With spring.jackson.use-jackson2-defaults set to true, FAIL_ON_UNKNOWN_PROPERTIES is enabled #49951
- 500 response from env endpoint when supplied pattern is invalid #49946
- Reactive MongoDB starter has a transitive dependency on the synchronous MongoDB driver #49945
- HTTP method is lost when configuring excludes in EndpointRequest #49943
- Honor HttpMethod for reactive additional endpoint paths #49880
- Docker Compose support doesn't work with apache/artemis image #49869
- Docker Compose support doesn't work with apache/activemq image #49866
- Spring Security's PathPatternRequestMatcher.Builder is not auto-configured when using WebMvcTest and spring-boot-security-test #49854
- API versioning path strategy should be applied path last as it is not meant to yield #49800
:notebook_with_decorative_cover: Documentation
- Update docs to encourage Java fundamentals for beginners that prefer to learn that way #50146
- HTTP Service Interface Clients still document that API versioning can be configured via properties #50126
- Link to the observability section of the Lettuce documentation is broken #50097
- Javadoc for StaticResourceLocation.FAVICON doesn't describe icons location #50085
- MySamlRelyingPartyConfiguration is missing a Kotlin sample #50024
- Incorrect default value for management.httpexchanges.recording.include in configuration metadata #50019
- Link to the Kubernetes documentation when discussing startup probes #50015
- Typo in JdbcSessionAutoConfiguration Javadoc #49873
- Clarify that configuration property default values are not available through the Environment #49851
- Document the need for Liquibase and Flyway starters #49839
- Kafka documentation refers to deprecated JSON serializer and deserializer classes #49826
:hammer: Dependency Upgrades
- Upgrade to Elasticsearch Client 9.2.8 #50027
- Upgrade to Groovy 5.0.5 #49911
- Upgrade to Hibernate 7.2.12.Final #50134
- Upgrade to Jackson Bom 3.1.2 #50051
- Upgrade to Jaxen 2.0.1 #50104
- Upgrade to Jaybird 6.0.5 #49914
- Upgrade to Jetty 12.1.8 #49915
- Upgrade to jOOQ 3.19.32 #50105
- Upgrade to Log4j2 2.25.4 #49916
- Upgrade to Lombok 1.18.46 #50150
- Upgrade to MariaDB 3.5.8 #49917
- Upgrade to Micrometer 1.16.5 #49972
- Upgrade to Micrometer Tracing 1.6.5 #49973
- Upgrade to MongoDB 5.6.5 #50028
- Upgrade to MySQL 9.7.0 #50159
- Upgrade to Neo4j Java Driver 6.0.5 #50075
- Upgrade to Reactor Bom 2025.0.5 #49974
- Upgrade to Spring AMQP 4.0.3 #49975
- Upgrade to Spring Data Bom 2025.1.5 #49976
- Upgrade to Spring Framework 7.0.7 #49977
- Upgrade to Spring GraphQL 2.0.3 #49978
- Upgrade to Spring Kafka 4.0.5 #49979
- Upgrade to Spring LDAP 4.0.3 #49980
- Upgrade to Spring Pulsar 2.0.5 #49981
- Upgrade to Spring Security 7.0.5 #49982
- Upgrade to Spring Session 4.0.3 #49983
- Upgrade to Testcontainers 2.0.5 #50135
- Upgrade to Thymeleaf 3.1.5.RELEASE #50152
- Upgrade to Thymeleaf Extras SpringSecurity 3.1.5.RELEASE #50153
- Upgrade to Tomcat 11.0.21 #49918
:heart: Contributors
Thank you to all the contributors who worked on this release:
@GollapudiSrikanth, @MohammedGhallab, @bachhs, @dlwldnjs1009, @edwardsre, @kodama-kcc, @kwondh5217, @ppapaj, @quaff, @refeccd, @scordio, and @xxxxxxjun
v4.0.5
:lady_beetle: Bug Fixes
- Test starter for Spring Integration does not include Spring Integration test module #49784
- Some sliced tests that import TransactionAutoConfiguration do not import TransactionManagerCustomizationAutoConfiguration #49782
- WebSocket messaging's task executors are only auto-configured and stompWebSocketHandlerMapping is only forced to be eager when using Jackson #49753
- WebSocket app fails to start when Jackson is on the classpath but there's no JsonMapper bean #49749
- Metadata annotation processor ignores method-level
@NestedConfigurationPropertywhen using constructor binding #49738 - Override of property in external 'application.properties' or 'application.yaml' is ignored #49731
- NativeImageResourceProvider does not find Flyway migration scripts in subdirectories #49706
- Add
@ConditionalOnWebApplicationto NettyReactiveWebServerAutoConfiguration #49695 @GraphQlTestdoes not include@ControllerAdvice#49672
:notebook_with_decorative_cover: Documentation
- Fix incorrect indefinite articles in Javadoc #49727
- Add some more Kotlin examples and trivial style fixes #49714
- Overhaul Spring Session documentation following modularization #49704
:hammer: Dependency Upgrades
- Upgrade to Brave 6.3.1 #49763
- Upgrade to Jackson 2 Bom 2.21.2 #49764
- Upgrade to jOOQ 3.19.31 #49765
- Upgrade to Netty 4.2.12.Final #49794
- Upgrade to Tomcat 11.0.20 #49767
- Upgrade to Zipkin Reporter 3.5.3 #49762
:heart: Contributors
Thank you to all the contributors who worked on this release:
@Joowon-Seo, @deejay1, @dlwldnjs1009, @kwondh5217, @ljrmorgan, and @quaff