Skip to content

Spring Boot 3.5.0 M2 Release Notes

Andy Wilkinson edited this page Feb 14, 2025 · 19 revisions

Spring Boot 3.5.0-M2 Release Notes

Upgrading from Spring Boot 3.4

Prometheus Pushgateway

Pushing metrics to a Prometheus Pushgateway now requires io.prometheus:prometheus-metrics-exporter-pushgateway instead of io.prometheus:simpleclient_pushgateway.

The new client’s Pushgateway support may also require a configuration change. If you were using management.prometheus.metrics.export.pushgateway.base-url, replace it with management.prometheus.metrics.export.pushgateway.address and adjust the value to be in the form host:port.

Three new properties have been added in support of the new Pushgateway client:

  • management.prometheus.metrics.export.pushgateway.format

  • management.prometheus.metrics.export.pushgateway.scheme

  • management.prometheus.metrics.export.pushgateway.token

Set the scheme property to https to use SSL when pushing metrics. Set the token property (instead of the existing username and password properties) to use token-based authentication. Set the format property to text to push metrics as text rather than using protobuf.

Minimum Requirements Changes

None.

New and Noteworthy

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

Ignore properties when using spring-boot-configuration-processor

When using the spring-boot-configuration-processor, the META-INF/additional-spring-configuration-metadata.json file can now be used to ignore properties:

{
  "ignored": {
    "properties": [
      {
        "name": "my.age"
      }
    ]
  }
}

This removes my.age from the generated spring-configuration-metadata.json file. Additionally, the information that my.age has been ignored is also recorded in the generated spring-configuration-metadata.json file.

Load properties from environment variables

While it was already possible to load a single property from an environment variable, it’s now possible to load multiple properties from a single environment variable.

For example, the multi-line environment variable MY_CONFIGURATION with this content:

my.var1=value1
my.var2=value2

can now be imported using the env: prefix:

spring.config.import=env:MY_CONFIGURATION

After this, my.var1 and my.var2 are available in the Environment.

This feature supports properties and yaml format. For more details, please see the documentation.

Triggering Quartz Jobs from the Actuator

The Quartz Actuator endpoint can now be used to trigger Quartz jobs by sending an HTTP POST to the /actuator/quartz/jobs/{groupName}/{jobName} URL.

See the updated REST documentation for an example.

Write Trace Ids in HTTP response headers

If your application is using Micrometer Observations with Tracing support, you can now configure the http.server.requests observations to write the current Trace Id (if present) as a X-Trace-Id HTTP response header. Your application will need to enable this feature with the new management.observations.http.server.requests.write-trace-header=true configuration property.

Customizing Structured Logging Stack Traces

Stack Trace written to structured logs can now be customized to limit their size or print them in a different format. You can use the logging.structured.json.stacktrace.* properties to configure stack trace output.

For details, see the updated reference documentation

Mappings Endpoint

The mappings endpoint now includes information about WebMvc.fn router functions. Consult the Actuator REST API documentation for details of the updated response structure.

Dependency Upgrades

Spring Boot 3.5.0-M2 moves to new versions of several Spring projects:

TBD

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

TBD

Miscellaneous

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

  • If io.micrometer:micrometer-java21 is on the classpath, a VirtualThreadsMetrics bean is now auto-configured.

  • The java.home system property is no longer used when running in native image.

  • The new property spring.jooq.config can be used to specify an external jOOQ settings.xml file or resource.

  • New factory methods have been added to SslManagerBundle to create a SslManagerBundle from a TrustManagerFactory or from a TrustManager.

  • The logging.structured.json.customizer properties now accepts more than one customizer.

  • A new spring.r2dbc.pool.acquire-retry property has been added.

  • @ConditionalOnBean now supports generic @Bean return types

  • @ConditionalOnProperty and @ConditionalOnBooleanProperty are now @Repeatable

  • Some unbindable properties with the prefixes spring.datasource.dbcp2, spring.datasource.hikari, spring.datasource.oracleucp and spring.datasource.tomcat have been removed from spring-configuration-metadata.json.

  • The new property spring.mvc.contentnegotiation.default-content-types can be used to configure default content types with Spring MVC.

  • EndpointRequest for both servlet and reactive stacks now supports matching on HTTP method.

  • SanitizingFunction now has convenience builder methods. See SanitizingFunction.sanitizeValue() for an example.

  • @ConfigurationPropertiesBinding annotated @Bean methods can now be implemented as lambdas.

  • ApplicationConversionService now detected generic types from converter @Bean methods.

Deprecations in Spring Boot 3.5.0-M2

  • Support for SignalFX has been deprecated, following the deprecation in Micrometer.

  • org.springframework.boot.autoconfigure.security.servlet.RequestMatcherProvider has been deprecated to move it to org.springframework.boot.actuate.autoconfigure.security.servlet.RequestMatcherProvider

Clone this wiki locally