:boot-docs: https://docs.spring.io/spring-boot/4.0-SNAPSHOT
:framework-api-docs: https://docs.spring.io/spring-framework/docs/7.0.x-SNAPSHOT/javadoc-api/org/springframework

= Spring Boot 4.0.0-M1 Release Notes



== Upgrading from Spring Boot 3.5


=== Migration Guide

To help with upgrading, a https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.0-Migration-Guide[migration guide] is available.



=== Minimum Requirements Changes

- Spring Framework 7
- Kotlin 2.2



== New and Noteworthy

TIP: Check link:Spring-Boot-4.0.0-M1-Configuration-Changelog[the configuration changelog] for a complete overview of the changes in configuration.



=== Milestones Available from Maven Central

Starting with 4.0.0-M1, Spring Boot milestones (and release candidates) are now published to Maven Central in addition to https://repo.spring.io.



=== Configuration Properties Metadata for External Types

It is now possible for `@ConfigurationProperties`-annotated types to refer to types that are located in a different module.
To source the metadata from those modules, you should add the annotation processor (if necessary) and flag the type with `@ConfigurationPropertiesSource`.

See the {boot-docs}/specification/configuration-metadata/index.html[reference documentation] for more details.



=== SSL Info

Support for the certificate validity threshold has been removed from the SSL info contribution.
A certificate that had a status of `WILL_EXPIRE_SOON` will now appear as `VALID`.
The information about the start and end of a certificate's validity remains.



=== SSL Health

Certificate chains that contain one or more certificates that will expire within the configured threshold (`management.health.ssl.certificate-validity-warning-threshold`) are
now listed in a new `expiringChains` entry in the details of the health response.
The status `WILL_EXPIRE_SOON` is no longer used and expiring certificates will have a status of `VALID`.



=== Task Decoration

The auto-configurations for task scheduling and task execution now support multiple `TaskDecorator` beans.
When the context contains multiple `TaskDecorator` beans, a `CompositeTaskDecorator` that delegates to them is created.
The individual decorators are called in the ordered defined by `@Order` and `Ordered`.



=== JmsClient

The auto-configuration for JMS now includes support for the {framework-api-docs}/jms/core/JmsClient.html[new `JmsClient` API].
The support for `JmsTemplate` and `JmsMessagingTemplate` is left unchanged.



=== Dependency Upgrades

Spring Boot 4.0.0-M1 moves to new versions of several Spring projects:

* https://github.com/micrometer-metrics/micrometer/releases/tag/v1.16.0-M1[Micrometer 1.16.0-M1]
* https://github.com/micrometer-metrics/tracing/releases/tag/v1.6.0-M1[Micrometer Tracing 1.6.0-M1]
* https://github.com/reactor/reactor/releases/tag/2025.0.0-M5[Reactor 2025.0.0-M5]
* https://github.com/spring-projects/spring-amqp/releases/tag/v4.0.0-M3[Spring AMQP 4.0.0-M3]
* https://github.com/spring-projects/spring-authorization-server/releases/tag/2.0.0-M1[Spring Authorization Server 2.0.0-M1]
* https://github.com/spring-projects/spring-batch/releases/tag/v6.0.0-M1[Spring Batch 6.0.0-M1]
* https://github.com/spring-projects/spring-data-bom/releases/tag/2025.1.0-M4[Spring Data 2025.1.0-M4]
* https://github.com/spring-projects/spring-framework/releases/tag/v7.0.0-M7[Spring Framework 7.0.0-M7]
* https://github.com/spring-projects/spring-graphql/releases/tag/v2.0.0-M1[Spring GraphQL 2.0.0-M1]
* https://github.com/spring-projects/spring-hateoas/releases/tag/3.0.0-M3[Spring HATEOAS 3.0.0-M3]
* https://github.com/spring-projects/spring-integration/releases/tag/v7.0.0-M1[Spring Integration 7.0.0-M1]
* https://github.com/spring-projects/spring-kafka/releases/tag/v4.0.0-M3[Spring Kafka 4.0.0-M3]
* https://github.com/spring-projects/spring-ldap/releases/tag/4.0.0-M1[Spring LDAP 4.0.0-M1]
* https://github.com/spring-projects/spring-pulsar/releases/tag/v2.0.0-M1[Spring Pulsar 2.0.0-M1]
* https://github.com/spring-projects/spring-restdocs/releases/tag/v4.0.0-M1[Spring REST Docs 4.0.0-M1]
* https://github.com/spring-projects/spring-security/releases/tag/7.0.0-M1[Spring Security 7.0.0-M1]
* https://github.com/spring-projects/spring-session/releases/tag/4.0.0-M1[Spring Session 4.0.0-M1]
* https://github.com/spring-projects/spring-ws/releases/tag/v5.0.0-M1[Spring WS 5.0.0-M1]

Numerous third-party dependencies have also been updated, some of the more noteworthy of which are the following:

* https://github.com/openzipkin/brave/releases/tag/6.3.0[Brave 6.3]
* https://commons.apache.org/proper/commons-codec/changes.html#a1.19.0[Commons Codec 1.19]
* https://commons.apache.org/proper/commons-lang/changes.html#a{3.18}[Commons Lang 3.18]
* https://www.elastic.co/docs/release-notes/elasticsearch/clients/java/9-0-0[Elasticsearch Client 9.0]
* https://documentation.red-gate.com/flyway/release-notes-and-older-versions/release-notes-for-flyway-engine[Flyway 11.10]
* https://docs.jboss.org/hibernate/orm/7.0/whats-new/whats-new.html[Hibernate 7.0]
* https://hibernate.org/validator/releases/9.0/#whats-new[Hibernate Validator 9.0]
* https://github.com/HtmlUnit/htmlunit/releases/tag/4.13.0[HtmlUnit 4.13]
* Jakarta Annotation 3.0
* https://github.com/jakartaee/persistence/releases/tag/3.2-3.2.0-RELEASE[Jakarta Persistence 3.2]
* Jakarta Servlet 6.1
* https://github.com/jakartaee/validation/releases/tag/3.1.0[Jakarta Validation 3.1]
* Jakarta WebSocket 2.2
* Jakarta WS RS 4.0
* https://github.com/eclipse-ee4j/jersey/releases/tag/4.0.0-M2[Jersey 4.0.0-M2]
* https://downloads.apache.org/kafka/4.0.0/RELEASE_NOTES.html[Kafka 4.0]
* https://github.com/JetBrains/kotlin/releases/tag/v2.2.0[Kotlin 2.2]
* https://github.com/Kotlin/kotlinx.serialization/releases/tag/v1.9.0[Kotlin Serialization 1.9]
* https://github.com/liquibase/liquibase/releases/tag/v4.33.0[Liquibase 4.33]
* https://github.com/mockito/mockito/releases/tag/v5.18.0[Mockito 5.18]
* https://github.com/open-telemetry/opentelemetry-java/releases/tag/v1.52.0[OpenTelemetry 1.52]
* https://github.com/apache/pulsar-client-reactive/releases/tag/v0.7.0[Pulsar Reactive 0.7]
* https://github.com/rabbitmq/rabbitmq-java-client/releases/tag/v5.26.0[Rabbit AMQP Client 5.26]
* https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.34.0[Selenium 4.34]
* https://github.com/SeleniumHQ/htmlunit-driver/releases/tag/htmlunit-driver-4.33.0[Selenium HtmlUnit 4.33]
* https://tomcat.apache.org/tomcat-11.0-doc/changelog.html[Tomcat 11.0]



=== Miscellaneous

Apart from the changes listed above, there have also been lots of minor tweaks and improvements including:

* The auto-configuration for Micrometer's metrics aspects now enables support for `@MeterTag` on `@Counted` and `@Timed` methods with
a SpEL-based `ValueExpressionResolver`.
* `@ServiceConnection` support for MongoDB now supports Testcontainers' `MongoDBAtlasLocalContainer`
* Improved error message when configuration property binding fails due to a class not found error
* Names of several reactive auto-configuration classes have been updated for consistency


== Deprecations in Spring Boot 4.0.0-M1

* `OperationMethod(Method method, OperationType operationType)` in favor of `OperationMethod(Method method, OperationType operationType, Predicate<Parameter> optionalParameters)`
