Releases: spring-projects/spring-boot
Releases · spring-projects/spring-boot
Release list
v4.2.0-M1
⭐ New Features
- Refine Forwarded headers configuration for Jetty servers #51148
- Disable Micrometer global registry in tests by default #51142
- Use GracefulHandler rather than StatisticsHandler to coordinate graceful shutdown of Jetty #51128
- Deprecate RestTemplate support #51118
- Update properties for forwarded headers to adapt to Reactor Netty changes #51031
- Update properties for forwarded headers to adapt to Spring Framework changes #51030
- Remove APIs that were deprecated for removal in 4.2 #50955
- Add support for image-based build caches #50899
- Provide plugin management for hibernate-maven-plugin #50892
- Support timeout option in RetryPolicySettings #50891
- Add self-reference to ApplicationContextAssertProvider #50500
- Add configuration property for leaveGroupOnClose in Kafka Streams #50432
- Expose Path getters on ApplicationHome and ApplicationTemp #50194
- Introduce RabbitMQ AMQP 1.0 client support #49857
- Introduce Generic AMQP 1.0 client support #49678
- Rename spring-boot-amqp to spring-boot-rabbitmq #49677
- Add support for AMQP 1.0 #49619
- Deprecate TestRestTemplate in favor of RestTestClient #46632
- spring-boot.run.useTestClasspath does not take target/test-classes in account #36115
🐞 Bug Fixes
- Structured logging: a failed JSON encode corrupts the next log event written on the same thread #51371
- Kafka consumer-specific security protocol is not taken into account #51370
- Exposing gRPC test server port should backoff if gRPC is not present #51291
- Micrometer registries pin the application context #51136
- Temporary file is not deleted when ExportedImageTar construction fails #51133
- spring.grpc.server.health.include-overall-health is not taken into account #51106
- Metadata annotation processor ignores getter-level
@NestedConfigurationPropertyfor records #51099 - spring-boot-h2-console pulls servlet-api as transitive dependency #51096
- PropertiesLauncher does not log nested archive paths #51090
- Methods that return the result of Map#remove are not declared with a
@Nullablereturn type #51088 - NativeImageResourceProvider flattens Flyway migration paths in subdirectories #50965
- Fix ordering of Kotlinx Serialization CodecCustomizer #50962
- JarFile is not closed when finding main class from archive #50960
📔 Documentation
- Description of spring.graphql.websocket.connection-init-timeout does not render correctly in the reference guide #51364
- spring.profiles.group should have a 'spring-profile-name' hint provider #51285
- Remove reference to removed InfluxDB auto-configuration #51177
- Use JacksonJsonSerde in Kafka Streams documentation #51162
- Document alternatives to HttpMessageConverters #51130
- Fix stale type reference for OTLP logging transport metadata #51126
- Metadata for spring.test.mockmvc.htmlunit.url declares the wrong type #51116
- Caching documentation refers to AutoConfigureCache by its pre-4.0 package #51114
- Fix examples in Metadata Format documentation chapter #51103
- Improve discoverability of the AOT Cache How-to guides #51001
🔨 Dependency Upgrades
- Upgrade to ActiveMQ 6.3.1 #51334
- Upgrade to Artemis 2.55.0 #51034
- Upgrade to Byte Buddy 1.18.11 #51035
- Upgrade to Commons Codec 1.22.1 #51198
- Upgrade to Commons Logging 1.4.0 #51037
- Upgrade to Couchbase Client 3.12.2 #51295
- Upgrade to CycloneDX Maven Plugin 2.9.3 #51199
- Upgrade to DB2 JDBC 12.1.5.0 #51039
- Upgrade to Elasticsearch Client 9.5.0 #51335
- Upgrade to Flyway 12.11.0 #51040
- Upgrade to Groovy 5.0.8 #51200
- Upgrade to Grpc Java 1.81.1 #51229
- Upgrade to Grpc Java 1.83.1 #51362
- Upgrade to Gson 2.14.0 #51042
- Upgrade to Hazelcast 5.7.0 #51309
- Upgrade to Hibernate 7.4.5.Final #51043
- Upgrade to Hibernate Validator 9.1.3.Final #51201
- Upgrade to HikariCP 7.1.0 #51045
- Upgrade to HtmlUnit 5.4.0 #51313
- Upgrade to HttpClient5 5.6.4 #51336
- Upgrade to HttpCore5 5.4.3 #51047
- Upgrade to Infinispan 16.2.2 #51203
- Upgrade to Jackson 2 Bom 2.21.5 #51078
- Upgrade to Jackson Bom 3.1.5 #51050
- Upgrade to Jedis 8.0.0 #51337
- Upgrade to Jetty 12.1.12 #51297
- Upgrade to jOOQ 3.21.7 #51314
- Upgrade to Json Path 3.0.0 #50786
- Upgrade to JSpecify 1.0.1 #51204
- Upgrade to JUnit Jupiter 6.1.3 #51315
- Upgrade to Kafka 4.3.1 #51054
- Upgrade to Kotlin 2.4.10 #51205
- Upgrade...
v4.1.1
⚠️ 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
🐞 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
📔 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
🔨 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](https://github.com...
v4.0.8
🐞 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
📔 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
🔨 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](https://github.com/spring-projects/spring-integration/releases...
v3.5.16
🔨 Dependency Upgrades
- Upgrade to Spring AMQP 3.2.12 #50818
- Upgrade to Spring Data Bom 2025.0.13 #50819
- Upgrade to Spring Integration 6.5.10 #50820
v4.1.0
Full release notes for Spring Boot 4.1 are available on the wiki.
⭐ New Features
- Add public constructor to InvalidConfigurationPropertyValueException that accepts a cause #50211
- Reduce memory consumption when repeatedly calling WritableJson.toByteArray #49428
🐞 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
📔 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
🔨 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](https://github.com/spri...
v4.0.7
🐞 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
📔 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
🔨 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](https://github.com/spring-projects/spring-boot/iss...
v3.5.15
🐞 Bug Fixes
- Artemis auto-configuration uses a predictable default location for the embedded broker's data #50743
- MailSender auto-configuration does not enable hostname verification #50742
- SSL should not be enabled when a SSL bundle is overridden to an empty string #50624
- Layer written outside the output location of '//' exception is thrown when using extract layers in root directory #50501
- Docker Compose support does not restore thread interrupt flag when catching InterruptedException #50451
- RabbitProperties enables SSL even when spring.rabbitmq.ssl.bundle is overridden to an empty string #50429
- GraphQL WebSocket support does not configure allowed origins #50391
- Buildpack module does not validate long-to-int casts #50382
- MappingsEndpoint reports the context's own ID as parentId when a parent exists #50373
- Created StackTracePrinter instances have no access to the Environment #50303
- NullPointerException in reactor-netty SniProvider when SSL bundle uses client-auth or server truststore without server-name-bundles #50301
- Spring Boot Loader Does Not Support RSA and EC Signed Jars #50292
- ConfigurationPropertiesReportEndpoint exposes AOP proxy internals #50273
- Actuator's '/cloudfoundryapplication' endpoint does not work if restrictive CORS configuration is provided using a bean named corsConfigurationSource #50254
- Meter registries are not removed from the global registry when the context is closed #50235
- ThreadPoolTaskScheduleBuilder unnecessarily loses precision when configuring await termination time #50225
- Apply HTML escaping to timestamp attribute in Whitelabel error page #50205
- NimbusJwtDecoder silently accepts unknown values for spring.security.oauth2.resourceserver.jwt.jws-algorithms #50118
- EndpointRequest links matcher unnecessarily matches HTTP methods other than GET #50095
📔 Documentation
- Fix reference to Gradle documentation for module replacement #50641
- Remove the use of Optional from Data Neo4j repository examples #50600
- Fix typos in documentation #50593
- Document Java 25 requirement for AOT cache #50482
- Clarify dependency requirement for Bean Validation support #50290
- Document SSL reloading with Let's Encrypt #50222
- Polish InvalidConfigurationPropertyValueException constructor javadoc #50212
- Document known testcontainers lifecycle issues #50210
- Document configuring multiple connectors with Jetty #50206
- Fix typo in Spring Security OAuth2 client registration documentation #50193
🔨 Dependency Upgrades
- Upgrade to Caffeine 3.2.4 #50308
- Upgrade to Cassandra Driver 4.19.3 #50670
- Upgrade to Glassfish JAXB 4.0.9 #50671
- Upgrade to Groovy 4.0.32 #50310
- Upgrade to Hibernate 6.6.53.Final #50721
- Upgrade to Jackson Bom 2.21.4 #50673
- Upgrade to Jakarta Json Bind 3.0.2 #50674
- Upgrade to Jakarta XML Bind 4.0.5 #50313
- Upgrade to Jaxen 2.0.6 #50722
- Upgrade to Jetty 12.0.36 #50676
- Upgrade to Jetty Reactive HTTPClient 4.0.14 #50723
- Upgrade to jOOQ 3.19.35 #50724
- Upgrade to Logback 1.5.34 #50677
- Upgrade to Maven Failsafe Plugin 3.5.6 #50678
- Upgrade to Maven Surefire Plugin 3.5.6 #50679
- Upgrade to Micrometer 1.15.12 #50511
- Upgrade to Micrometer Tracing 1.5.12 #50512
- Upgrade to Netty 4.1.135.Final #50680
- Upgrade to Postgresql 42.7.11 #50317
- Upgrade to Pulsar 4.0.11 #50725
- Upgrade to R2DBC MySQL 1.4.2 #50319
- Upgrade to Reactor Bom 2024.0.18 #50513
- Upgrade to SAAJ Impl 3.0.6 #50726
- Upgrade to SLF4J 2.0.18 #50533
- Upgrade to Spring AMQP 3.2.11 #50514
- Upgrade to Spring Authorization Server 1.5.8 #50515
- Upgrade to Spring Batch 5.2.6 #50516
- Upgrade to Spring Data Bom 2025.0.12 #50517
- Upgrade to Spring Framework 6.2.19 #50518
- Upgrade to Spring GraphQL 1.4.6 #50739
- Upgrade to Spring HATEOAS 2.5.3 #50519
- Upgrade to Spring Integration 6.5.9 #50520
- Upgrade to Spring Kafka 3.3.16 #50521
- Upgrade to Spring LDAP 3.3.8 #50522
- Upgrade to Spring Pulsar 1.2.18 #50523
- Upgrade to Spring RESTDocs 3.0.6 #50524
- Upgrade to Spring Retry 2.0.13 #50525
- Upgrade to Spring Security 6.5.11 #50526
- Upgrade to [Spring Session 3.5.7](https://github.com/spring-...
v4.1.0-RC1
⭐ New Features
- Add support for docker.elastic.co/elasticsearch/elasticsearch #50119
- Narrow the scope of icons pattern to /icons/icon-* #50084
- Add configuration options for KafkaTemplate's allowNonTransactional and closeTimeout #49954
- Align ReactorHttpClientBuilder defaults with Spring Framework and provide an opt-out #49950
- Add support for providing a custom SessionTimeout bean #49883
- Add support for Redis Annotation driven listeners #49858
- Support spring.webflux.default-html-escape property for application-wide HTML escaping configuration #49791
- Add fallback support for '/opt/homebrew/bin' on macOS #49721
- Support InetAddress filtering for HTTP Clients #49687
- Monitor certificates from truststore in SslMeterBinder #49641
- Enable ansi support by default on Windows 11+ #49571
- Add '
@GrpcAdvice' exception handling support #49053 - Add support for OpenTelemetry SDK environment variables #48799
- Add ability to read custom layers.xml from classpath #32466
- Support LazyConnectionDataSourceProxy #15480
🐞 Bug Fixes
- Default security is misconfigured when spring-boot-actuator-autoconfigure is present and spring-boot-health is not #50190
- Elasticsearch Rest5Client auto-configuration misconfigures underlying HTTP client #50189
- ApplicationPidFileWriter does not handle symlinks correctly #50186
- RandomValuePropertySource is not suitable for secrets #50184
- Cassandra auto-configuration misconfigures CqlSessionBuilder #50182
- ApplicationTemp does not handle symlinks correctly #50179
- Remote DevTools performs comparison incorrectly #50177
- spring.rabbitmq.ssl.verify-hostname is applied inconsistently #50175
- GrpcDisableCsrfHttpConfigurer incorrectly uses inverse of 'spring.grpc.server.security.csrf.enabled' property #50145
- API versioning path strategy should be applied path last as it is not meant to yield #50127
- Whole number values are ignored when configuring min and max expected values and SLO boundaries for a distribution summary meter #50078
- Classic starters are missing several modules #50072
- Module spring-boot-resttestclient is missing from spring-boot-starter-test-classic #50070
- Annotations like
@Ssldon't work on@Beanmethods when using@ServiceConnection#50065 - EnversRevisionRepositoriesRegistrar should reuse
@EnableEnversRepositoriesrather than configuring the JPA counterpart #50040 - WebFlux Cloud Foundry links endpoint includes query string from received request in resolved links #50018
- Imports on a containing test class are ignored when a nested class has imports #50013
- Spring Security's PathPatternRequestMatcher.Builder is not auto-configured when using WebMvcTest and spring-boot-security-test #49988
- Reactive MongoDB starter has a transitive dependency on the synchronous MongoDB driver #49958
- With spring.jackson.use-jackson2-defaults set to true, FAIL_ON_UNKNOWN_PROPERTIES is enabled #49957
- 500 response from env endpoint when supplied pattern is invalid #49947
- HTTP method is lost when configuring excludes in EndpointRequest #49944
- Honor HttpMethod for reactive additional endpoint paths #49881
- Docker Compose support doesn't work with apache/artemis image #49870
- Docker Compose support doesn't work with apache/activemq image #49867
- ReactiveOAuth2ResourceServerAutoConfiguration should trigger only on real Reactive Applications #49807
- Test starters 'spring-boot-starter-grpc-client-test' and 'spring-boot-starter-grpc-server-test' are missing #49690
- Properties in '
@ConfigurationProperties' annotated type shouldn't be able to define the same '@Name' #49565 - Distribution's SLO, minimum expected value, and maximum expected value are not applied to long task timer meters #49190
- WebConversionService breaks embedded value resolving #8923
📔 Documentation
- Update docs to encourage Java fundamentals for beginners that prefer to learn that way #50147
- HTTP Service Interface Clients still document that API versioning can be configured via properties #50128
- Link to the observability section of the Lettuce documentation is broken #50098
- Javadoc for StaticResourceLocation.FAVICON doesn't describe icons location #50086
- MySamlRelyingPartyConfiguration is missing a Kotlin sample #50025
- Move OAuth2 and SAML 2.0 documentation to a security section #50022
- Incorrect default value for management.httpexchanges.recording.include in configuration metadata #50020
- Link to the Kubernetes documentation when discussing startup probes #50016
- Document missing gRPC's default unit in GrpcClientProperties #49879
- Document the need for Liquibase and Flyway starters #49875
- Typo in JdbcSessionAutoConfiguration Javadoc #49874
- Clarify that configuration property default values are not available through the Environment #49852
- Kafka documentation refers to deprecated JSON serializer and deserializer classes #49834
- Document gRPC Support #49291
🔨 Dependency Upgrades
- Upgrade to ActiveMQ 6.2.4 #50002
- Upgrade to Byte Buddy 1.18.8 #49922
- Upgrade to Couchbase Client 3.11.2 #50066
- Upgrade to Ehcache3 3.12.0 #49923
- Upgrade to Elasticsearch Client 9.3.4 #50099
- Upgrade to Flyway 12.4.0 #50079
- Upgrade to Git Commit ID Maven Plugin 9.2.0 #49925
- Upgrade to Groovy 5.0.5 #49926
- Upgrade to Hibernate 7.2.12.Final #50136
- Upgrade to HttpClient5 5.6.1 [#50137](https://github.com/spring-project...
v4.0.6
🐞 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
📔 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
🔨 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
...
v3.5.14
🐞 Bug Fixes
- ApplicationPidFileWriter does not handle symlinks correctly #50173
- RandomValuePropertySource is not suitable for secrets #50172
- Cassandra auto-configuration misconfigures CqlSessionBuilder #50171
- ApplicationTemp does not handle symlinks correctly #50170
- Remote DevTools performs comparison incorrectly #50169
- spring.rabbitmq.ssl.verify-hostname is applied inconsistently #50168
- EnversRevisionRepositoriesRegistrar should reuse
@EnableEnversRepositoriesrather than configuring the JPA counterpart #50035 - Annotations like
@Ssldon't work on@Beanmethods when using@ServiceConnection#50033 - Whole number values are ignored when configuring min and max expected values and SLO boundaries for a distribution summary meter #50021
- WebFlux Cloud Foundry links endpoint includes query string from received request in resolved links #50008
- 500 response from env endpoint when supplied pattern is invalid #49942
- HTTP method is lost when configuring excludes in EndpointRequest #49885
- Docker Compose support doesn't work with apache/artemis image #49865
- Honor HttpMethod for reactive additional endpoint paths #49864
- Docker Compose support doesn't work with apache/activemq image #49863
- Imports on a containing test class are ignored when a nested class has imports #49860
📔 Documentation
- Link to the observability section of the Lettuce documentation is broken #50092
- Javadoc for StaticResourceLocation.FAVICON doesn't describe icons location #50083
- MySamlRelyingPartyConfiguration is missing a Kotlin sample #50023
- Incorrect default value for management.httpexchanges.recording.include in configuration metadata #50010
- Link to the Kubernetes documentation when discussing startup probes #50007
- Update docs to encourage Java fundamentals for beginners that prefer to learn that way #49895
- Clarify that configuration property default values are not available through the Environment #49835
🔨 Dependency Upgrades
- Upgrade to Groovy 4.0.31 #49905
- Upgrade to Hibernate 6.6.49.Final #50140
- Upgrade to Jaxen 2.0.1 #50109
- Upgrade to Jaybird 6.0.5 #49907
- Upgrade to Jetty 12.0.34 #49908
- Upgrade to jOOQ 3.19.32 #50110
- Upgrade to Lombok 1.18.46 #50148
- Upgrade to MariaDB 3.5.8 #49909
- Upgrade to Micrometer 1.15.11 #49961
- Upgrade to Micrometer Tracing 1.5.11 #49962
- Upgrade to MySQL 9.7.0 #50161
- Upgrade to Neo4j Java Driver 5.28.13 #50074
- Upgrade to Reactor Bom 2024.0.17 #49963
- Upgrade to Spring AMQP 3.2.10 #49964
- Upgrade to Spring Authorization Server 1.5.7 #49965
- Upgrade to Spring Data Bom 2025.0.11 #49966
- Upgrade to Spring Framework 6.2.18 #49967
- Upgrade to Spring Kafka 3.3.15 #50129
- Upgrade to Spring LDAP 3.3.7 #49968
- Upgrade to Spring Pulsar 1.2.17 #49969
- Upgrade to Spring Security 6.5.10 #49970
- Upgrade to Spring Session 3.5.6 #49971
- Upgrade to Thymeleaf 3.1.5.RELEASE #50149
- Upgrade to Thymeleaf Extras SpringSecurity 3.1.5.RELEASE #50151
- Upgrade to Tomcat 10.1.54 #49910
❤️ Contributors
Thank you to all the contributors who worked on this release:
@MohammedGhallab, @dlwldnjs1009, @edwardsre, @kodama-kcc, @kwondh5217, @quaff, @refeccd, and @scordio