-
Notifications
You must be signed in to change notification settings - Fork 40.8k
Spring Boot 3.4.0 M1 Release Notes
Previously, when a @ConfigurationProperties
class annotated with @Validated
was being validated using a Bean Validation implementation such as Hibernate Validator, validation of nested properties would be performed as they were bound, irrespective of the use of @Valid
.
In Spring Boot 3.4, validation now follows the behavior of the Bean Validation specification.
Validation is performed from the @ConfigurationProperties
-annoated class and only cascades down to nested properties where the corresponding field is annotated with @Valid
.
When upgrading, inspect your @ConfigurationProperties
classes with Bean Validation constraints.
Add @Valid
as necessary where you want the validation to cascade down to nested properties.
HtmlUnit has been upgraded to 4.3.
With this upgrade comes a change in dependency coordinates from net.sourceforge.htmlunit:htmlunit
to org.htmlunit:htmlunit
and a change in package names from com.gargoylesoftware.htmlunit.
to org.htmlunit.
. When upgrading, update your build configuration and imports accordingly.
Selenium HtmlUnit has been updated to 4.22.
With this upgrade comes a change in dependency coordinates from org.seleniumhq.selenium:htmlunit-driver
to org.seleniumhq.selenium:htmlunit3-driver
. When upgrading, update your build configuration accordingly.
The default Cloud Native Buildpacks builder used when building OCI images for JVM applications using the Maven spring-boot:build-image
goal or Gradle bootBuildImage
task has changed from paketobuildpacks/builder-jammy-base
to paketobuildpacks/builder-jammy-tiny
.
This should result in smaller images.
The tiny
builder does not include a shell, so it might not work for applications that require a start script to run the application.
See the Maven or Gradle documentation for information on customizing the builder.
For faster startup times and efficient WebJars asset resolution, you will need to update your pom.xml/build.gradle to depend on org.webjars:webjars-locator-lite
instead of org.webjars:webjars-locator-core
(both dependencies are managed by Spring Boot). Note that org.webjars:webjars-locator-core
support in Spring is now deprecated and will be removed in a future version. See the reference documentation section on this feature.
Classes, methods, and properties that were deprecated in Spring Boot 3.2 and marked for removal in 3.4 have been removed in this release. Please ensure that you aren’t calling deprecated methods before upgrading.
Tip
|
Check the configuration changelog for a complete overview of the changes in configuration. |
Support for structured logging has been introduced with built-in support for Elastic Common Schema (ecs
) and Logstash (logstash
) formats.
To enable structured file logging set logging.structured.format.file
to ecs
or logstash
.
Similarly, to enable structured console logging set logging.structured.format.console
.
To learn more about Spring Boot’s support for structured logging, including how to define a custom format, see the reference documentation.
The new property spring.application.group
can be used to group applications together, for example if they all belong to some business unit or one bigger application arrangement.
When this property is set, it’s also included in the log messages.
This behavior can be controlled with the property logging.include-application.group
.
The application group is also automatically added to the OpenTelemetry Resource
.
The new properties management.otlp.tracing.export.enabled
, management.wavefront.tracing.export.enabled
and management.zipkin.tracing.export.enabled
can be used to enable or disable trace exporting more finely grained.
The new properties under management.otlp.logs
can be used to auto-configure OpenTelemetry’s OtlpHttpLogRecordExporter
and SdkLoggerProvider
.
The ProcessInfoContributor
now also shows memory info about heap and non-heap usage.
Auto-configuration for MockMvcTester
is provided when AssertJ is on the classpath.
MockMvcTester
lets you define the requests and the assertions using a fluent API.
It can be injected anywhere MockMvc
is.
For more details, check the dedicated section of the Spring Framework reference documentation.
The new properties spring.docker.compose.start.arguments
and spring.docker.compose.stop.arguments
can be used to specify additional command line arguments that are passed to Docker Compose when starting and stopping services.
The POSTGRES_HOST_AUTH_METHOD=trust
environment variable is now supported.
A trustBuilder
option has been added to the Maven and Gradle plugins for building OCI images.
This option controls how the CNB lifecycle is invoked, providing improved security when using builders from untrusted sources.
By default, builders from the Paketo project, Heroku, and Google are trusted.
See the Maven or Gradle documentation for information.
Spring Boot 3.4.0-M1 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:
-
You can now use a
Customizer<Liquibase>
bean to customize Liquibase before it is being used -
The properties used to create a JCache
CacheManager
can now be customized by defining aJCachePropertiesCustomizer
bean. -
The
RequestToViewNameTranslator
used by Spring MVC can now be customized by defining a bean namedviewNameTranslator
. -
Lettuce’s
ClientOptions
can now be customized using aLettuceClientOptionsBuilderCustomizer
bean. For broader configuration of the wholeLettuceClientConfiguration
, continue to useLettuceClientConfigurationBuilderCustomizer
. -
The new customizer
ProxyConnectionFactoryCustomizer
can be used to customize a R2DBCProxyConnectionFactory
. -
An audit event is now published if a Spring Security logout happens.
-
TLS on
JavaMailSender
can now be configured with SSL bundles using the new propertiesspring.mail.ssl.*
-
GSON’s strictness can be configured using the new
spring.gson.strictness
property.