spring-projects/spring-boot
 Watch   
 Star   
 Fork   
2 days ago
spring-boot

v4.2.0-RC2

⭐ New Features

  • Remove LDAP SSL reload support #52365
  • Add support for X-Forwarded-Prefix with Reactor Netty #52316

🐞 Bug Fixes

  • Setting management.observations.conventions to open-telemetry enables neither semantic convention #52619
  • PushGatewayTaskScheduler does not correctly shutdown task scheduler when context is closed #52591
  • ClearCachesApplicationListener does not find inherited clearCache() methods #52589
  • MongoTransactionManager created by BatchDataMongoAutoConfiguration is not customized by TransactionManagerCustomizers #52572
  • Configuration processor does not handle known types when they are fully-qualified #52571
  • Invalid AMQP Rabbit host is reported with the wrong value #52568
  • Avoid premature overflow when converting durations to microseconds #52561
  • Binding a value from a config tree fails after a collection of the same element type has been bound from the same config tree #52559
  • JsonWriter writes invalid JSON when usingPairs is used with a named member #52549
  • Logback GELF structured logging writes a null short_message when the log message is null #52547
  • Auto-configured KafkaTransactionManager is not customized by TransactionManagerCustomizers #52542
  • Custom layers in the Gradle plugin include excluded content instead of excluding it #52540
  • RabbitMQ addresses without a port use the AMQP port when SSL is enabled #52538
  • BasicJsonParser does not decode \b, \f, \n, \r, \t and \uXXXX escape sequences #52534
  • NestedJarFile.getComment() fails with an EOFException when the jar has no comment #52513
  • Plain text thread dump reports threads in Object.wait() as parking on Java 19+ #52511
  • When using both spring-boot-amqp-rabbitmq and spring-boot-rabbitmq health information from the latter is lost #52506
  • JSON parse failures no longer produce DockerOutputParseExceptions #52500
  • ECS structured logging writes empty service and service.node objects #52497
  • ConfigurationMetadataAnnotationProcessor produces non-repeatable output if multiple endpoints share the same ID #52494
  • Graceful shutdown does not wait for active requests after a restart of Tomcat or Jetty #52490
  • RabbitMQ uses the wrong port by default when an SSL bundle is configured #52488
  • Auto-configured R2dbcTransactionManager is not customized by TransactionManagerCustomizers #52485
  • JsonWriter writes NaN and infinite values as invalid JSON #52483
  • ZipEndOfCentralDirectoryRecord finds the record signature inside the zip comment #52481
  • LLdap Docker Compose support fails to connect when LLDAP_LDAP_USER_DN is configured #52475
  • ZipContent.Entry hasNameStartingWith ignores the offset of virtualized nested directory names #52464
  • ZipContent cannot open a zip with data after the end of central directory record #52461
  • ZipContent reads the zip comment from the wrong position when the archive has prefixed data #52459
  • Root logger configuration cannot be retrieved and has no configured level with Log4j2 #52455
  • Docker Compose OTLP integration requires gRPC and HTTP ports to be exposed when only HTTP is used #52451
  • Spring Batch JDBC auto-configuration connects to the database on startup to detect its type, with no way to configure it #52449
  • OnAvailableEndpointCondition caches retain closed application contexts through their Environment #52447
  • DataSourceTransactionManagerAutoConfiguration uses an old and no-longer-supported property to control exception translation #52445
  • Tomcat's new 'maxLocaleCount' property cannot be easily configured #52443
  • DevTools leaks a File Watcher thread for every failed restart #52441
  • SSL bundle ciphers and enabled protocols are sometimes silently ignored when the underlying component does not support their configuration #52438
  • AMQP 1.0 should not set any credential to use ANONYMOUS by default #52435
  • Default RabbitMQ AMQP 1.0 port to 5671 when an SSL bundle is configured #52432
  • Hikari does not register its own MBeans when lazy connection fetching is used with JMX enabled #52426
  • SSL bundle ciphers and enabled protocols are ignored by RabbitMQ clients #52416
  • SSL bundle ciphers and enabled protocols are ignored by Kafka clients #52413
  • Health endpoint fails with an internal error for a path with an unknown intermediate segment #52411
  • Servlet application fails to start when both JWT and opaque token resource server properties are configured #52409
  • Runners can be invoked after the application context has closed during startup #52408
  • Binding @ConfigurationProperties beans concurrently can corrupt BoundConfigurationProperties and fail the bind #52406
  • Auto-configured JavaMailSender does not apply SSL bundle ciphers or enabled protocols #52404
  • Class path root cannot be resolved in executable jars after #52246 #52402
  • Kotlin Serialization does not back off when JSON-B is the only JSON converter #52389
  • Matrix parameters distort the values passed to a match all remaining selector when using WebMvc or WebFlux #52378
  • Server name SSL bundles with upper-case server names are not used with Netty #52364
  • Config data locations with brackets in their path are not loaded correctly #52360
  • Closing the context can hang when Hikari pool suspension is enabled #52359
  • OriginTrackedPropertiesLoader drops the line following a comment that ends with a backslash #52357
  • Closing a child context stops the keep-alive thread #52344
  • MimeMappings copies of DEFAULT are empty and equals is asymmetric #52342
  • StringHttpMessageConverter cannot be overridden with an HTTP message converters customizer #52336
  • ConfigurationPropertyName incorrectly accepts an opening square bracket at the end of a name #52334
  • Directories created by jarmode tools extract make Docker layers non-reproducible #52330
  • Lettuce cluster refresh properties are ignored when the cluster is not configured using spring.data.redis.cluster properties #52328
  • BasicJsonParser mishandles braces within string values #52326
  • MessageSourceMessageInterpolator mishandles unbalanced closing braces #52324
  • BasicJsonParser does not ignore whitespace around the elements of a list #52318
  • ZipContent does not handle nested directory names with multi-byte characters #52315
  • RabbitMQ AMQP 1.0 should not set an empty exchange by default #52305
  • spring.data.redis.database is ignored when configuring master/replica nodes #52189

📔 Documentation

  • Document how to customize the starter parent's repackage execution and main class #52556
  • Fix typos and broken references in gRPC documentation #52543
  • Table of auto-configured ReactiveHealthIndicators does not list the R2DBC indicator #52424
  • Metadata for some health indicator enabled properties is missing #52422
  • Document that test clients are not observed #52418
  • Fix stale configuration metadata hints #52386
  • Fix broken xref in testing documentation #52384

🔨 Dependency Upgrades

❤️ Contributors

Thank you to all the contributors who worked on this release:

@CCCLL, @Moaziz667, @RamiDarras, @Ridzzz0Alam, @ShakilUrRehman21, @Tanishq-Choudhary, @b84330808, @beyondwin, @challa, @dalerazimov, @noojung, @quaff, @raunakpandey1, and @zhoubiao188

15 days ago
spring-boot

v4.2.0-RC1

⭐ New Features

  • Apply the readAllBytes() optimization to deflated nested jar entries #52285
  • Improve uber jar performance by looking up classes and resources directly in nested jars #52246
  • Support RABBITMQ_DEFAULT_VHOST in Docker Compose RabbitMQ integration #51940
  • Support random root passwords in MariaDB and MySQL Docker Compose integration #51938
  • Improve auto-configuration sorting performance #51867
  • Allow properties migrator to fail application startup #51855
  • Add property to enable Caffeine async cache mode #51844
  • Check resource existence once when looking for deleted files #51841
  • Avoid parsing nested jar URLs for cached resource lookups #51827
  • Support provided-scope libraries when extracting an executable war #51372
  • Switch to ubuntu-resolute-builder as the default builder #51249
  • Provide a callback for customizing Tomcat's Server #50259

🐞 Bug Fixes

  • JarUrlClassLoader rejects valid class names since #52271 #52284
  • Resources containing spaces cannot be read from executable jars after #52246 #52280
  • gRPC client 'grpc' load balancing fails to bind with a NullPointerException when no child policies are configured #52269
  • OriginTrackedResource does not implement equals correctly #52268
  • OriginTrackedPropertiesLoader drops properties whose name starts with # or ! #52266
  • Logback ColorConverter unnecessarily parses its options for every log event #52262
  • JWTs are rejected when issuer-uri is empty and jwk-set-uri is set #52261
  • Package manifest attributes are missing for nested jars without directory entries #52259
  • Empty system property in TestPropertyValues is cleared instead of being restored to its empty value #52209
  • Graceful shutdown of Tomcat or Jetty may call back with REQUESTS_ACTIVE when stop is called immediately after shutDownGracefully on an idle server #52199
  • NettyWebServer stop may hang when called immediately after shutDownGracefully #52198
  • Prevent gRPC client properties from overriding user customizations #52194
  • MongoDB fails to connect when credentials contain a space #52169
  • Authentication fails when password configured in spring.elasticsearch.uris contains a colon #52167
  • Logging can be lost when a context is paused by the test context framework #52089
  • Fractions of a second are handled incorrectly when configuring gRPC service config durations #52087
  • Docker Compose support for MongoDB fails to connect when credentials contain a character that requires URL encoding #52085
  • Jersey does not use the endpoint ObjectMapper when Actuator is running on a separate port #51983
  • Configuration property descriptions may be lost when building incrementally with Gradle #51926
  • BasicJsonParser mishandles escaped characters in nested lists and maps #51909
  • Zero week value conversion fails with 'intValue cannot be extracted from WEEKS' exception #51895
  • App fails to start when using DevTools and manually configuring JDBC or R2DBC without spring-boot-jdbc or spring-boot-r2dbc #51891
  • Docker Compose support incorrectly recognizes MARIADB_ALLOW_EMPTY_PASSWORD instead of MARIADB_ALLOW_EMPTY_ROOT_PASSWORD #51889
  • Auto-configured Kotlinx Serialization JSON codec customization is not applied #51878
  • Unavoidable warning when using ubuntu-resolute-builder with tiny run image #51851

📔 Documentation

  • Fix typo in gRPC testing documentation #52188
  • Fix Gradle example for servlet-based gRPC servers #52086
  • Fix actuator endpoint property names in Javadoc #51887
  • Document InetAddressFilter limitations with respect to proxy servers #51864

🔨 Dependency Upgrades

❤️ Contributors

Thank you to all the contributors who worked on this release:

@CCCLL, @LindseyZ1205, @MycroCosmo, @NotAFlightRisk, @aalsanie, @anthonydahanne, @challa, @crapxxi, @dmitrysulman, @galenzo17, @geonheeryu, @hunseonglee, @janwaleed09, @khopland, @ksky8864, @lavinhoque33, @move-hoon, @ngocnhan-tran1996, @noojung, @ohchanKyu, @padosol, @rvullriede, @ryujungkyun, @scordio, @sharanrenukeshbharmshetty, @skdas20, @timtebeek, @xoruddl, and @zhoubiao188

15 days ago
spring-boot
15 days ago
spring-boot

v4.0.9

⭐ New Features

  • Add TWENTY_SEVEN to JavaVersion enum #51422

🐞 Bug Fixes

  • JWTs are rejected when issuer-uri is empty and jwk-set-uri is set #52249
  • Package manifest attributes are missing for nested jars without directory entries #52244
  • OriginTrackedPropertiesLoader drops properties whose name starts with # or ! #52207
  • OriginTrackedResource does not implement equals correctly #52205
  • Graceful shutdown of Tomcat or Jetty may call back with REQUESTS_ACTIVE when stop is called immediately after shutDownGracefully on an idle server #52195
  • Empty system property in TestPropertyValues is cleared instead of being restored to its empty value #52125
  • MongoDB fails to connect when credentials contain a space #52121
  • NettyWebServer stop may hang when called immediately after shutDownGracefully #52119
  • Authentication fails when password configured in spring.elasticsearch.uris contains a colon #52047
  • Logging can be lost when a context is paused by the test context framework #51959
  • Docker Compose support for MongoDB fails to connect when credentials contain a character that requires URL encoding #51939
  • Jersey does not use the endpoint ObjectMapper when Actuator is running on a separate port #51937
  • BasicJsonParser mishandles escaped characters in nested lists and maps #51907
  • Zero week value conversion fails with 'intValue cannot be extracted from WEEKS' exception #51892
  • App fails to start when using DevTools and manually configuring JDBC or R2DBC without spring-boot-jdbc or spring-boot-r2dbc #51872
  • Docker Compose support incorrectly recognizes MARIADB_ALLOW_EMPTY_PASSWORD instead of MARIADB_ALLOW_EMPTY_ROOT_PASSWORD #51870
  • Auto-configured Kotlinx Serialization JSON codec customization is not applied #51842
  • NullPointerException can be thrown when using uber jars due to a race condition in NestedJarFileResources #51744
  • DevTools does not detect a reactive web environment #51708
  • Connection fails when rabbitmq Docker Compose service is configured to use SSL #51666
  • When server.reactive.session.cookie.same-site is not set, session cookies have no SameSite attribute #51636
  • OAuth2 resource server ignores authorities-claim-delimiter when set on its own #51619
  • In a reactive web application, Cloud Foundry security integration returns a 500 rather than a 503 when the cloud controller URL is unavailable #51613
  • Some assertion messages name the wrong parameter #51568
  • SBOM-related manifest attributes are missing from Maven-packaged wars #51551
  • Docker Compose integration for RabbitMQ skips credential fallbacks when an environment variable has no value #51546
  • jarmode tools commands print stacktrace instead of an error message #51540
  • Layer temp file is not deleted when layer creation fails #51519
  • NestedByteChannel.read(ByteBuffer) incorrectly returns 0 when buffer could not be filled #51515
  • Customizer null checks in HTTP client builders assert the wrong attribute #51509
  • developmentOnly and testAndDevelopmentOnly configurations do not specify any attributes causing potential resolution problems #51492
  • SQL Server Docker Compose integration may duplicate the JDBC URL's encrypt parameter #51467
  • SSL host config customizations may be lost during Tomcat initialization #51466
  • OAuth2ClientProperties are not available when a user-defined ClientRegistrationRepository bean is provided #51447
  • Source is not closed consistently by all JSON marshal testers #51417
  • JmsHealthIndicator leaks watchdog threads if start fails immediately #51412
  • File handle in SpringBootJoranConfigurator should be closed #51398
  • Validation of deprecated io.buildpacks.stack.id is too aggressive #51390
  • SSL host config customizations are lost when reloading SSL bundles #51290
  • Docker Compose ProcessRunner can hang or leave orphan processes #50963
  • Configuration property descriptions may be lost when building incrementally with Gradle #50489

📔 Documentation

  • Fix actuator endpoint property names in Javadoc #51869
  • Fix broken links from reference documentation to external Javadoc #51815
  • Remove reference to AppOptics in the reference guide as it has retired #51807
  • Fix broken links #51791
  • Update Spring Framework reference links #51750
  • Maven plugin documentation incorrectly references remote restart property #51743
  • Update testcontainers javadoc links #51739
  • Fix documented default of spring.test.database.replace #51709
  • Correct Jackson 3 Javadoc links #51660
  • Fix typo in deprecated Pushgateway base-url property metadata #51627
  • Remove references to Spring Data Geode #51563
  • Fix typos in service containers javadoc and reference documentation #51431
  • Document support for Java 27 #51424
  • Document SAML2 back-off in WebFlux security documentation #51421
  • Remove reference to removed SpringBootWebSecurityConfiguration #51411

🔨 Dependency Upgrades

❤️ Contributors

Thank you to all the contributors who worked on this release:

@2heunxun, @CCCLL, @CHISANW, @COBI-98, @DevJunz, @JunggiKim, @LindseyZ1205, @MacAlsandair, @SebTardif, @dlwldn30, @dmitrysulman, @fabio-grassi, @galenzo17, @icikle, @janwaleed09, @kdomo, @khopland, @ksky8864, @lavinhoque33, @msridhar, @ngocnhan-tran1996, @noojung, @ohchanKyu, @padosol, @piyushrajyadav, @rvullriede, @ryujungkyun, @scordio, @scottfrederick, @timtebeek, @vlsi, @xoruddl, @xxxxxxjun, @yyuneu, and @zhoubiao188

2026-09-24 18:11:19
spring-boot

v4.2.0-M2

⭐ New Features

  • Deprecate AppOptics as it has retired #51810
  • Improve classpath entry lookup performance during jar creation and extraction #51787
  • Add spring.kafka.listener.await-async-results-on-stop property #51774
  • Rationalize Kafka configuration outside of KafkaProperties #51769
  • Make the active Observation LongTaskTimer on the auto-configured DefaultMeterObservationHandler opt-in #51762
  • Configure allowed HTTP methods in GraphQL transports #51732
  • Allow to use Mongo JobRepository with any PlatformTransactionManager #51725
  • Resolve property placeholders in constructor binding default values #51661
  • Add auto-configured BaggageTaggingSpanProcessor for OpenTelemetry tag fields #51656
  • Improve the performance of layer index creation #51654
  • Speed up layer lookups when extracting a layered jar #51653
  • Move Tomcat's servlet-specific properties beneath server.tomcat.servlet #51603
  • Align handling of null and empty values in SPRING_APPLICATION_JSON with YAML processing #51583
  • Remove Dependency Management for Janino #51567
  • Add jarmode tools command to print / export the SBOM #51505
  • Pick up all @TypeExcludeFilters annotations on test classes #51489
  • Make it easier to map MessageSourceProperties onto a user-provided AbstractResourceBasedMessageSource #51484
  • Support multi-segment additional health endpoint paths #51470
  • Honor spring.ldap.* properties in the Embedded LDAP server #51465
  • Add a configuration property for configuring embedded LDAP operation types that require authentication #51461
  • Add TWENTY_SEVEN to JavaVersion enum #51427
  • Automatically filter additional configuration metadata from Spring Boot-built archives #51386
  • Add SSL bundle support to LDAP auto-configuration #51382
  • Align the default for server.tomcat.use-relative-redirects with Tomcat's default #51173
  • Allow configuring Micrometer Tracing MDC keys #50595
  • Add common OTLP configuration for endpoint, compression and headers #50461
  • Retain probe defaults when configuring other properties on probe health groups #50296
  • Include security error body in WebFlux Cloud Foundry endpoint responses #50256
  • Provide a configuration property to switch from Micrometer to OpenTelemetry semantic conventions #49241
  • Support listener and template specific Kafka Admin properties #38830

🐞 Bug Fixes

  • spring.http.clients.cookie-handling has no effect when using a reactive client backed by an HttpComponents connector #51767
  • NullPointerException can be thrown when using uber jars due to a race condition in NestedJarFileResources #51746
  • Connection fails when rabbitmq Docker Compose service is configured to use SSL #51668
  • SBOM-related manifest attributes are missing from Maven-packaged wars #51652
  • When server.reactive.session.cookie.same-site is not set, session cookies have no SameSite attribute #51640
  • OAuth2 resource server ignores authorities-claim-delimiter when set on its own #51631
  • developmentOnly and testAndDevelopmentOnly configurations do not specify any attributes causing potential resolution problems #51624
  • In a reactive web application, Cloud Foundry security integration returns a 500 rather than a 503 when the cloud controller URL is unavailable #51615
  • ReactiveOAuth2ResourceServerWebSecurityAutoConfiguration annotated with wrong condition #51588
  • WritableJson.toByteArray() may corrupt supplementary characters #51586
  • Layer temp file is not deleted when layer creation fails #51582
  • Docker Compose integration for RabbitMQ skips credential fallbacks when an environment variable has no value #51579
  • Some assertion messages name the wrong parameter #51575
  • OAuth2ResourceServerProperties.Jwt has a setter that does not match its getter #51566
  • jarmode tools commands print stacktrace instead of an error message #51548
  • Docker Compose ProcessRunner can hang or leave orphan processes #51539
  • NestedByteChannel.read(ByteBuffer) incorrectly returns 0 when buffer could not be filled #51521
  • Customizer null checks in HTTP client builders assert the wrong attribute #51514
  • SSL host config customizations may be lost during Tomcat initialization #51512
  • SQL Server Docker Compose integration may duplicate the JDBC URL's encrypt parameter #51482
  • SSL host config customizations are lost when reloading SSL bundles #51458
  • OAuth2ClientProperties are not available when a user-defined ClientRegistrationRepository bean is provided #51451
  • LdapHealthIndicator reports UNKNOWN instead of UP when LDAP server doesn't expose a protocol version #51442
  • JmsHealthIndicator leaks watchdog threads if start fails immediately #51434
  • Honour a wrapper's unwrap when resolving the root DataSource #51420
  • Source is not closed consistently by all JSON marshal testers #51419
  • File handle in SpringBootJoranConfigurator should be closed #51416
  • Validation of deprecated io.buildpacks.stack.id is too aggressive #51401

📔 Documentation

  • Document support for Java 27 #51826
  • Fix broken links from reference documentation to external Javadoc #51821
  • Remove reference to AppOptics in the reference guide as it has retired #51809
  • Fix broken links #51803
  • Update Spring Framework reference links #51772
  • Update testcontainers javadoc links #51766
  • Maven plugin documentation incorrectly references remote restart property #51748
  • Fix documented default of spring.test.database.replace #51729
  • Fix ActiveMQContainer Javadoc link in Testcontainers documentation #51723
  • Correct Jackson 3 Javadoc links #51664
  • Document baggage propagation over gRPC #51657
  • Fix typo in deprecated Pushgateway base-url property metadata #51633
  • Remove references to Spring Data Geode #51565
  • Fix typos in service containers javadoc and reference documentation #51446
  • Document SAML2 back-off in WebFlux security documentation #51436
  • Remove reference to removed SpringBootWebSecurityConfiguration #51414

🔨 Dependency Upgrades

❤️ Contributors

Thank you to all the contributors who worked on this release:

@2heunxun, @CHISANW, @COBI-98, @DevJunz, @JunggiKim, @MacAlsandair, @SebTardif, @Wanbinyu, @basteez, @dhruv9b, @dlwhdgus0810, @dlwldn30, @fabio-grassi, @henriquejsza, @hjm12223, @htjworld, @icikle, @jjh75607, @kdomo, @msridhar, @ngocnhan-tran1996, @nikita-kibitkin, @noojung, @nosan, @o-shevchenko, @ohchanKyu, @philsttr, @piyushrajyadav, @quaff, @scottfrederick, @seanxuu, @shakuzen, @somiljain2006, @vlsi, @xoruddl, @xxxxxxjun, and @yyuneu

2026-08-20 23:38:38
spring-boot

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 @NestedConfigurationProperty for 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 @Nullable return 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

❤️ Contributors

Thank you to all the contributors who worked on this release:

@Chrisg2000, @DragonFSKY, @LordKay-sudo, @MacAlsandair, @SebTardif, @TYsewyn, @dmitrysulman, @eddumelendez, @filiphr, @ghost, @msridhar, @ngocnhan-tran1996, @scordio, @skdas20, @sourabh-bhattacharjee, @taasjord, @vvzvvv, @wantaekchoi, @xfocus3, and @zxuhan

2026-08-20 23:38:37
spring-boot

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 protobuf extension with the grpc plugin using an empty block. The Spring Boot Gradle plugin will then automatically configure the use of protoc-gen-grpc-java as 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 @NestedConfigurationProperty for 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 @Nullable return 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 @Validated class 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 @Value placeholder 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

❤️ 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

2026-08-20 23:38:36
spring-boot

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 @Nullable return 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 @Validated class 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 @NestedConfigurationProperty for 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 @Value placeholder 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

❤️ 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

2026-06-25 16:04:46
spring-boot

v3.5.16

🔨 Dependency Upgrades

2026-06-11 01:10:30
spring-boot

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

❤️ Contributors

Thank you to all the contributors who worked on this release:

@Abdlatif-nabgha, @DragonFSKY, @Kapil-chn7, @SJvaca30, @SebTardif, @ares333, @codingkiddo, @dlwldnjs1009, @henriquejsza, @igormukhin, @johnnypwong, @kwondh5217, @leestana01, @mheath, @ngocnhan-tran1996, @nosan, @quaff, @scordio, @vinhhieu21, @won-seoop, and @zxuhan