Spring Boot v4.1.0-RC1 Release Notes
Release Date: 2026-04-23 // about 2 months ago-
⭐ 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
- 0️⃣ 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
- 0️⃣ 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...
Previous changes from v4.1.0-M4
-
⭐ New Features
- ➕ Add 'spring.jpa.bootstrap' property for async background bootstrapping #49733
- ➕ Add support for custom GrpcServerObservationConvention #49730
- A Spring Data JPA bootstrap mode property of 'deferred' should provide a meaningful message if no suitable AsyncTaskExecutor is found #49688
🛠 🐞 Bug Fixes
- ✅ Test starter for Spring Integration does not include Spring Integration test module #49786
- ✅ Some sliced tests that import TransactionAutoConfiguration do not import TransactionManagerCustomizationAutoConfiguration #49783
- WebSocket app fails to start when Jackson is on the classpath but there's no JsonMapper bean #49755
- 🔧 WebSocket messaging's task executors are only auto-configured and stompWebSocketHandlerMapping is only forced to be eager when using Jackson #49754
- 📇 Metadata annotation processor ignores method-level
@NestedConfigurationPropertywhen using constructor binding #49739 - Override of property in external 'application.properties' or 'application.yaml' is ignored #49732
- NativeImageResourceProvider does not find Flyway migration scripts in subdirectories #49707
- ➕ Add
@ConditionalOnWebApplicationto NettyReactiveWebServerAutoConfiguration #49699 - App using spring-cloud-stream-binder-rabbit fails to start with 4.1.0-M3 #49676
- ✅
@GraphQlTestdoes not include@ControllerAdvice#49673
📚 📔 Documentation
- 🛠 Fix incorrect indefinite articles in Javadoc #49728
- 🔧 Document gRPC's default unit in configuration properties consistently #49722
- ➕ Add some more Kotlin examples and trivial style fixes #49715
- 📚 Overhaul Spring Session documentation following modularization #49705
⬆️ 🔨 Dependency Upgrades
- ⬆️ Upgrade to Artemis 2.53.0 #49769
- ⬆️ Upgrade to Brave 6.3.1 #49771
- ⬆️ Upgrade to Grpc Java 1.80.0 #49772
- ⬆️ Upgrade to Jackson 2 Bom 2.21.2 #49773
- ⬆️ Upgrade to jOOQ 3.21.0 #49774
- ⬆️ Upgrade to Netty 4.2.12.Final #49795
- ⬆️ Upgrade to Prometheus Client 1.5.1 #49777
- ⬆️ Upgrade to Protobuf Common Protos 2.67.0 #49778
- ⬆️ Upgrade to Protobuf Java 4.34.1 #49779
- ⬆️ Upgrade to Protobuf Maven Plugin 5.1.0 #49776
- ⬆️ Upgrade to Thymeleaf Layout Dialect 4.0.1 #49780
- ⬆️ Upgrade to Tomcat 11.0.20 #49781
- ⬆️ Upgrade to Zipkin Reporter 3.5.3 #49770
❤️ Contributors
🚀 Thank you to all the contributors who worked on this release:
@deejay1, @dlwldnjs1009, @kwondh5217, @ljrmorgan, @quaff, and @therepanic