NextStack

spring-boot v4.0.9

patch PublishedOct 22, 2026 Sourcespring-projects/spring-boot

spring-boot v4.0.9

:star: New Features

  • Add TWENTY_SEVEN to JavaVersion enum #51422

:lady_beetle: 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

:notebook_with_decorative_cover: 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

:hammer: Dependency Upgrades

:heart: 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


Source spring-projects/spring-boot · v4.0.9 · 2026-10-22 · upstream release

Mirrored verbatim for indexing. All rights belong to the upstream project.

Release notes are published by the upstream project and mirrored here for indexing. All rights belong to their authors.