-
Notifications
You must be signed in to change notification settings - Fork 41.5k
Spring Boot 4.0.0 M3 Release Notes
To help with upgrading, a migration guide is available.
Spring Boot now uses Jackson 3 as its preferred JSON library.
Jackson 3 uses new group IDs and package names with com.fasterxml.jackson
becoming tools.jackson
.
An exception to this is the jackson-annotations
module which continues to use the com.fasterxml.jackson.core
group ID and com.fasterxml.jackson.annotation
package.
To learn more about the changes in Jackson 3, refer to the Jackson wiki.
For libraries that require Jackson 2, dependency management for Jackson 2 remains and a manually configured Jackson 2 ObjectMapper
can be used alongside Boot’s auto-configuration for Jackson 3 if needed.
A number of classes have been removed for consistency with Jackson 3:
-
JsonObjectSerializer
toObjectValueSerializer
. -
JsonValueDeserializer
toObjectValueDeserializer
. -
Jackson2ObjectMapperBuilderCustomizer
toJsonMapperBuilderCustomizer
.
To clarify the scope of spring-boot-starter-aop
, it has been renamed to spring-boot-starter-aspectj
.
If you have added the starter explicitly in your application, please review if you actually need it before using the replacement.
If your application does not use AspectJ, typically an annotation of the org.aspectj.lang.annotation
, it is very much likely you do need the starter at all.
Spring Data MongoDB no longer provide defaults for UUID and BigInteger/BigDecimal representations. This aligns with the driver recommendation to not favor a particular representation for UUID or BigInteger/BigDecimal to avoid representation changes caused by upgrades to a newer Spring Data version.
An explicit configuration is expected and the representations can be set using the spring.mongodb.representation.uuid
and spring.data.mongodb.representation.big-decimal
properties, respectively.
With the portfolio moving from Spring Retry to new core features of Spring Framework, dependency management for Spring Retry has been removed.
If your application still relies on Spring Retry, an explicit version is now required. Please consider moving your use of Spring Retry to Spring Framework.
Spring Kafka has moved its retry capabilities from Spring Retry to Spring Framework.
As a result, spring.kafka.retry.topic.backoff.random
has been removed in favor of spring.kafka.retry.topic.backoff.jitter
.
The latter provides more flexibility over the former. See the documentation for more details.
Spring AMQP has moved its retry capabilities from Spring Retry to Spring Framework.
Spring Boot offers a customization hook-point for retry features used by the RetryTemplate
and message listeners.
To make it more explicit, two dedicated customizers have been introduced: RabbitTemplateRetrySettingsCustomizer
, and RabbitListenerRetrySettingsCustomizer
.
If you were using RabbitRetryTemplateCustomizer
to customize the retry settings according to a target, you will need to migrate to either of those interfaces.
The PropertyMapper
class no longer calls adapter or predicate methods by default when the source value is null
.
This has removed the need for the alwaysApplyingNotNull()
method which has been removed.
If you need to perform a mapping even for null
values you can use the new always()
method.
For example,
map.from(source::method).to(destination::method);
Will not call destination.method(…)
if source.method()
returns null
.
Where as:
map.from(source::method).always().to(destination::method);
Will call destination.method(null)
if source.method()
returns null
.
If you use the PropertyMapper
, you might want to review commit 239f384ac0
which shows how Spring Boot itself adapted to the new API.
Optional actuator endpoint parameters must now be annotated with JSpecify’s @Nullable
.
The previously introduced @OptionalParameter
has been removed in this milestone.
If you were using it, please use org.jspecify.annotations.Nullable
instead.
Spring Authorization Server is now part of Spring Security. Explicit dependency management has been removed in favor of what’s already provided by Spring Security.
As a result, you can no longer override the version of Spring Authorization Server using the spring-authorization-server.version
property.
If you need to do this going forward, use spring-security.version
.
The liveness and readiness probes are now enabled by default.
This means the health endpoint now exposes the liveness
and readiness
groups by default.
If you do not need those probes, you can disable them by using the management.endpoint.health.probes.enabled
property.
A new spring-boot-persistence
module has been created to house general persistence-related code and properties.
Users of @EntityScan
should adapt their imports to org.springframework.boot.persistence.autoconfigure.EntityScan
.
The spring.dao.exceptiontranslation.enabled
property is no longer supported.
Please use spring.persistence.exceptiontranslation.enabled
instead.
The BootstrapRegistry
and related classes have moved form org.springframework.boot
to org.springframework.boot.bootstrap
. The EnvironmentPostProcessor
interface has also moved from org.springframework.boot.env
to org.springframework.boot
.
If you have deep integrations with Spring Boot you may need to update both your code and your spring.factories
files.
Tip
|
Check the configuration changelog for a complete overview of the changes in configuration. |
The MongoDB health indicators have been reworked so that they no longer require Spring Data MongoDB. This allows health information to be provided when using the MongoDB Java Driver directly.
As part of this change, the health indicators have moved from spring-boot-data-mongodb
to spring-boot-mongodb
. Their packages have also been updated accordingly.
A new property, spring.data.mongodb.representation.big-decimal
, has been introduced to control how Spring Data MongoDB stores BigDecimal
(and BigInteger
) values in MongoDB.
A number of properties have also been renamed. See the migration guide for details.
spring.jackson.datetime.<feature-name>
properties can be used to enable and disable DataTimeFeature
settings on the auto-configured JsonMapper
.
Spring Boot now ships a new "spring-boot-kotlin-serialization" module and corresponding "spring-boot-kotlin-serialization-starter" for Kotlin Serialization support.
This will contribute a Json
bean and configure it with the available spring.kotlin.serialization.*
properties.
Note that a HttpMessageConverter
will be also contributed to the application and will be set ahead of other JSON converters (acting as fallbacks).
Spring Boot 4.0.0-M3 moves to new versions of several Spring projects:
Numerous third-party dependencies have also been updated, some of the more noteworthy of which are the following:
Apart from the changes listed above, there have also been lots of minor tweaks and improvements including:
-
Log4j Core configuration file detection for Log4j 3 has been improved
-
Resource lookup in DevTools restart has been optimized
-
ScheduledTasksObservabilityAutoConfiguration
has been renamed toScheduledTasksObservationAutoConfiguration
for consistency -
Authenticating with Elasticsearch using an API key is now supported using the new
spring.elasticsearch.api-key
property. -
ConditionalOnEnabledTracing
has been renamed toConditionalOnEnabledTracingExport
-
The property
management.tracing.enabled
has been renamed tomanagement.tracing.export.enabled
-
SanitizableData.getKey()
andSanitizableData.getLowerCaseKey()
never returnnull
. Passing anull
value as akey
in theSanitizableData
will now throw an exception. -
Specialized interfaces have been introduced in
PropertiesConfigAdapter
for better nullability handling. -
The property
spring.dao.exceptiontranslation.enabled
has been renamed tospring.persistence.exceptiontranslation.enabled
. -
The max size of Tomcat’s static cache can now be configured using the
server.tomcat.resource.cache-max-size
property. -
The JSpecify nullability annotations have been refined further.