= Spring Boot 3.5.0-M1 Release Notes



== Upgrading from Spring Boot 3.4



=== spring-boot-parent
The `spring-boot-parent` module is no longer published.
It provides dependency management for internal dependencies used, for example, in Spring Boot's own tests.
If you were using `spring-boot-parent`, replace it with dependency management of your own that meets your application's needs.



=== Using `.enabled` and Other Boolean Configuration Properties
Supported values for `.enabled` properties have been tightened with this release and are now more consistent.
Values must now be either `true` or `false`.

Previous versions of Spring Boot would sometimes use conditions that considered any value other than `false` as enabled.


=== Validation of profile naming

Rules for profile naming have been tightened with this release and are now more consistent.
Profiles can now only contain `-` (dash), `\_` (underscore), letters and digits.
Additionally, Profiles are not allowed to start or end with `-` or `_`.



=== Redis

When `spring.data.redis.url` is configured, the Redis database that is used is determined by the URL.
If the URL does not specify a database, the default of `0` is used.
The `spring.data.redis.database` property is now ignored when `spring.data.redis.url` is configured, aligning its behavior with the host, port, username, and password properties.



=== Minimum Requirements Changes
None.



== New and Noteworthy
TIP: Check link:Spring-Boot-3.5.0-M1-Configuration-Changelog[the configuration changelog] for a complete overview of the changes in configuration.



=== Task decoration for scheduled tasks
If a `TaskDecorator` bean is present, it is applied to the auto-configured `taskScheduler` bean.
It is also applied to the auto-configured `ThreadPoolTaskSchedulerBuilder` and `SimpleAsyncTaskSchedulerBuilder` beans.
It will be used by any schedulers created using those builders.



=== Vibur Connection Pool
Support for configuring a https://github.com/vibur/vibur-dbcp[Vibur DBCP connection pool] using `DataSourceBuilder` has been added.
Dependency management has also been updated to cover `org.vibur:vibur-dbcp`.



=== Redis
Add support for configuring https://github.com/redis/lettuce/wiki/ReadFrom-Settings[`ReadFrom`] using the `spring.data.redis.lettuce.read-from` property.



=== SSL bundle metrics
Spring Boot Actuator now publishes metrics for SSL bundles.
The metric `ssl.chains` counts the number of chains and their status (valid, expired, soon-to-be-expired, not-yet-valid).
The metric `ssl.chain.expiry` tracks the number of seconds until expiry for each certificate chain.



=== Liquibase
The managed version of Liquibase is now 4.31.0.
Two new Liquibase properties have been added:

- `spring.liquibase.analytics-enabled` – Whether to send product usage data and analytics to Liquibase
- `spring.liquibase.license-key` – Liquibase Pro license key

Use of the properties requires Liquibase 4.31.0 or later.


=== Dependency Upgrades
Spring Boot 3.5.0-M1 moves to new versions of several Spring projects:

* https://github.com/spring-projects/spring-integration/releases/tag/v6.5.0-M1[Spring Integration 6.5.0-M1]
* https://github.com/spring-projects/spring-ldap/releases/tag/3.3.0-M1[Spring LDAP 3.3.0-M1]
* https://github.com/spring-projects/spring-security/releases/tag/6.5.0-M1[Spring Security 6.5.0-M1]

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

* https://activemq.apache.org/components/artemis/download/release-notes-2.39.0[Artemis 2.39]
* https://github.com/assertj/assertj/releases/tag/assertj-build-3.27.3[AssertJ 3.27]
* https://github.com/raphw/byte-buddy/releases/tag/byte-buddy-1.16.0[Byte Buddy 1.16]
* https://github.com/ben-manes/caffeine/releases/tag/v3.2.0[Caffeine 3.2]
* https://commons.apache.org/proper/commons-dbcp/changes-report.html#a2.13.0[Commons DBCP 2.13]
* https://documentation.red-gate.com/flyway/release-notes-and-older-versions/release-notes-for-flyway-engine[Flyway 11.2]
* Hikari CP 6.2
* https://github.com/HtmlUnit/htmlunit/releases/tag/4.8.0[HtmlUnit 4.8]
* https://github.com/FirebirdSQL/jaybird/releases/tag/v6.0.0[Jaybird 6.0]
* https://downloads.apache.org/kafka/3.9.0/RELEASE_NOTES.html[Kafka 3.9]
* https://github.com/liquibase/liquibase/releases/tag/v4.31.0[Liquibase 4.31]
* https://github.com/micrometer-metrics/micrometer/releases/tag/v1.15.0-M1[Micrometer 1.15.0-M1]
* https://github.com/micrometer-metrics/tracing/releases/tag/v1.5.0-M1[Micrometer Tracing 1.5.0-M1]
* https://github.com/mockito/mockito/releases/tag/v5.15.2[Mockito 5.15]
* https://dev.mysql.com/doc/relnotes/connector-j/en/news-9-2-0.html[MySQL 9.2]
* https://github.com/open-telemetry/opentelemetry-java/releases/tag/v1.46.0[OpenTelemetry 1.46]
* https://github.com/quartz-scheduler/quartz/releases/tag/v2.5.0[Quartz 2.5]
* https://github.com/rabbitmq/rabbitmq-java-client/releases/tag/v5.24.0[Rabbit AMQP Client 5.24]
* https://github.com/rabbitmq/rabbitmq-stream-java-client/releases/tag/v0.21.0[Rabbit Stream Client 0.21]
* https://github.com/SeleniumHQ/selenium/releases/tag/selenium-4.28.0[Selenium 4.28]
* https://github.com/SeleniumHQ/htmlunit-driver/releases/tag/htmlunit-driver-4.27.0[Selenium HtmlUnit 4.27]




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

* The `application_name` property of the Postgres docker container is now configured by default using `spring.application.name`.
* The auto-configuration for Jackson retains modules that have been added prior to its execution, rather than overwriting them.
* Tomcat connector's max parameter count can be configured using the `server.tomcat.max-parameter-count` property.
* Actuator's process info contributor now contains virtual thread information when running on JDK 24 or later.
* The ECS structured logging format now adds Logback and Log4j's markers in the `tags` field.
* Spring Boot now installs a Logback `OnErrorConsoleStatusListener` to print error messages during Logback initialization to the console.
* The 'error' entry returned from `ErrorAttributes` now wraps all `MessageSourceResolvable` instances to ensure safe JSON serialization.
* Zipkin auto-configuration  now uses `ZipkinHttpClientSender` by default, if the `HttpClient` class is unavailable `URLConnectionSender` is used.
* A new `@ConditionalOnBooleanProperty` annotation has been introduced.
* Empty passwords are now supported when using Bitnami's PostgreSQL image with Docker Compose. Set `ALLOW_EMPTY_PASSWORD` in the container's environment to enable the support.
* The new property `management.server.accesslog.prefix` can now be used to customize the access log prefix for the management server.
* The AWS Advanced JDBC Wrapper is now auto-detected from `jdbc:aws-wrapper:…` URLs, removing the need to configure `spring.datasource.driver-class-name`.
* ``ConstraintViolation``s can be adapted to a `MethodValidationResult` by setting the new `spring.validation.method.adapt-constraint-violations` property to `true`



== Deprecations in Spring Boot 3.5.0-M1

* `ConditionalOutcome.inverse(...)` has been deprecated for removal since it doesn't generate a useful message
