Skip to content

Spring Boot 3.4.0 M1 Release Notes

Phillip Webb edited this page Nov 13, 2024 · 1 revision

Spring Boot 3.4.0-M1 Release Notes

Upgrading from Spring Boot 3.3

Bean Validation of Configuration Properties

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 4.3

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 4.22

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.

Paketo tiny Builder for Building OCI Images

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.

WebJars Locator Integration

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.

Deprecations from Spring Boot 3.2

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.

Minimum Requirements Changes

Gradle

Gradle 7.5, 8.0, 8.1, and 8.2 are no longer supported. Gradle 7.x (7.6.4 or later) or Gradle 8.x (8.3 or later) is now required.

New and Noteworthy

Tip
Check the configuration changelog for a complete overview of the changes in configuration.

Structured Logging

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.

Observability Improvements

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.

AssertJ Support for MockMvc

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.

Docker Compose Improvements

Command Line Arguments

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.

PostgreSQL

Redis

Support for Redis Stack and Redis Stack Server has been added using the redis/redis-stack and redis/redis-stack-server container images respectively.

Testcontainers Improvements

Kafka

org.testcontainers.kafka.KafkaContainer is now supported.

Redis

Support for Redis Stack and Redis Stack Server has been added using the redis/redis-stack and redis/redis-stack-server container images respectively.

Image Building Improvements

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.

Miscellaneous

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 a JCachePropertiesCustomizer bean.

  • The RequestToViewNameTranslator used by Spring MVC can now be customized by defining a bean named viewNameTranslator.

  • Lettuce’s ClientOptions can now be customized using a LettuceClientOptionsBuilderCustomizer bean. For broader configuration of the whole LettuceClientConfiguration, continue to use LettuceClientConfigurationBuilderCustomizer.

  • The new customizer ProxyConnectionFactoryCustomizer can be used to customize a R2DBC ProxyConnectionFactory.

  • 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 properties spring.mail.ssl.*

  • GSON’s strictness can be configured using the new spring.gson.strictness property.

Deprecations in Spring Boot 3.4.0-M1

  • spring.gson.lenient in favor of spring.gson.strictness.

  • @MockBean and @SpyBean in favor of Spring Framework’s @MockitoBean and MockitoSpyBean respectively.

Clone this wiki locally