Skip to content

Spring Boot 3 Upgrade (epic) #523

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
fabapp2 opened this issue Nov 3, 2022 · 0 comments
Closed

Spring Boot 3 Upgrade (epic) #523

fabapp2 opened this issue Nov 3, 2022 · 0 comments
Labels
3.0.0 Spring Boot 3.0.0 archived

Comments

@fabapp2
Copy link
Contributor

fabapp2 commented Nov 3, 2022

labels: ["3.0.0","epic"]

Spring Boot 3.0.0 RC1 Release Notes

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0.0-RC1-Release-Notes

For changes in earlier milestones, please refer to:

Upgrading from Spring Boot 2.x

server.max-http-header-size

Previously, the server.max-http-header-size was treated inconsistently across the four supported embedded web servers. When using Jetty, Netty, or Undertow it would configure the max HTTP request header size. When using Tomcat it would configure the max HTTP request and response header sizes. To address this inconsistency, server.max-http-header-size has been deprecated and a replacement, server.max-http-request-header-size, has been introduced. Both properties now only apply to the request header size, irrespective of the underlying web server. To limit the max header size of an HTTP response on Tomcat or Jetty (the only two servers that support such a setting), use a WebServerFactoryCustomizer.

Updated Phases for Graceful Shutdown

The phases used by the SmartLifecycle implementations for graceful shutdown have been updated. Graceful shutdown now begins in phase SmartLifecycle.DEFAULT_PHASE - 2048 and the web server is stopped in phase SmartLifecycle.DEFAULT_PHASE - 1024. Any SmartLifecycle implementations that were participating in graceful shutdown should be updated accordingly.

Configuring Gradle Tasks

Spring Boot?s Gradle tasks have been updated to consistently use Gradle?s Property support for their configuration. This will have little, if any, impact if you are using Gradle?s Groovy DSL. If you are using the Kotlin DSL, you may need to change the way that you set properties. For, example in Spring Boot 2.x, layering of the bootJar task could be disabled as follows:

tasks.named<BootJar>("bootJar") {
layered {
isEnabled = false
}
}

In 3.0, the following must be used:

tasks.named<BootJar>("bootJar") {
layered {
enabled.set(false)
}
}

Please refer to the Gradle plugin?s reference documentation for further examples

Excluding Properties From build-info.properties With Gradle

As part of the previously described changes to configuring Gradle tasks, the mechanism for excluding properties from the generated build-info.properties file has also changed. Previously, properties could be excluded by setting them to null. This no longer works and has been replaced with a name-based mechanism:

springBoot {
buildInfo {
excludes = ['time']
}
}

The equivalent in the Gradle Kotlin DSL is as follows:

springBoot {
buildInfo {
excludes.set(setOf("time"))
}
}

Minimum Requirements Changes

None.

New and Noteworthy

Tip

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

GraalVM Native Image Support

This release represents the culmination of the efforts to support GraalVM native images in Spring Boot, Spring Framework, and the rest of the Spring portfolio. See the updated documentation for more information on creating GraalVM native images with Spring Boot.

More Flexible Auto-configuration for Spring Data JDBC

The auto-configuration for Spring Data JDBC is now more flexible. Several auto-configured beans that are required by Spring Data JDBC are now conditional and can be replaced by defining a bean of the same type. The types of the beans that can now be replaced are the following:

  • org.springframework.data.jdbc.core.JdbcAggregateTemplate

  • org.springframework.data.jdbc.core.convert.DataAccessStrategy

  • org.springframework.data.jdbc.core.convert.JdbcConverter

  • org.springframework.data.jdbc.core.convert.JdbcCustomConversions

  • org.springframework.data.jdbc.core.mapping.JdbcMappingContext

  • org.springframework.data.relational.RelationalManagedTypes

  • org.springframework.data.relational.core.dialect.Dialect

Support for Infinispan Reinstated

With its 14.0 release, Infinispan has added support for Jakarta EE 9. As a result, we have been able to reinstate support for Infinispan. Please note that, where available, the -jakarta variant of Infinispan?s modules should be used.

Auto-Configuration for Prometheus Examplars

When there is a Micrometer Tracing Tracer bean and Prometheus is on the classpath, a SpanContextSupplier is now auto-configured. This supplier links metrics to traces by making the current trace ID and span ID available to Prometheus.

Log4j2 Enhancements

Log4j2 support has been updated with new extensions that provide the following functionality:

  • Profile-specific Configuration

  • Environment Properties Lookup

  • Log4j2 System Properties

For details, please see the updated documentation

Logback Configuration in a Native Image

logback.xml and logback-spring.xml can now be used to configure logging in an application that is compiled to a GraalVM native image.

Dependency Upgrades

Spring Boot 3.0.0-RC1 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:

  • Flyway 9.5.0

  • Hibernate 6.1.4.Final

  • Jackson 2.14.0-rc2

  • Jedis 4.3.0

  • Kafka 3.3.1

  • Kotlin 1.7.20

  • Lettuce 6.2.1.RELEASE

  • Liquibase 4.17.0

  • Log4j2 2.19.0

  • Logback 1.4.4

  • Micrometer 1.10.0-RC1

  • Micrometer Tracing 1.0.0-RC1

  • Mockito 4.8.1

  • MongoDB 4.8.0-beta0

  • Netty 4.1.84.Final

  • OpenTelemetry 1.19.0

  • SLF4J 2.0

  • SnakeYAML 1.33

  • Thymeleaf 3.1.0.RC1

  • Tomcat 10.0.27

  • Undertow 2.2.20.Final

Miscellaneous

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

  • When using spring-rabbit-stream, a RabbitStreamTemplate and Environment will now be auto-configured whether or not spring.rabbitmq.listener.type is stream.

Deprecations in Spring Boot 3.0

None.

Spring Boot 3.0.0 M5 Release Notes

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0.0-M5-Release-Notes#spring-boot-300-m5-release-notes

For changes in earlier milestones, please refer to:

Upgrading from Spring Boot 2.x

Changes to Data properties

The spring.data prefix has been reserved for Spring Data and any properties under the prefix imply that Spring Data is required on the classpath.

Cassandra Properties

Configuration Properties for Cassandra have moved from spring.data.cassandra. to spring.cassandra..

Redis Properties

Configuration Properties for Redis have moved from spring.redis. to spring.data.redis. as redis auto-configuration requires Spring Data to be present on the classpath.

JMX Endpoint Exposure

By default, only the health endpoint is now exposed over JMX, to align with the default web endpoint exposure. This can be changed by configuring the management.endpoints.jmx.exposure.include and management.endpoints.jmx.exposure.exclude properties.

Actuator Endpoints Sanitization

Since, the /env and /configprops endpoints can contains sensitive values, all values are always masked by default. This used to be case only for keys considered to be sensitive.

Instead, this release opts for a more secure default. The keys-based approach has been removed in favor of a role based approach, similar to the health endpoint details. Whether unsanitized values are shown or not can be configured using a property which can have the following values:

  • NEVER - All values are sanitized.

  • ALWAYS - All values are present in the output (sanitizing functions will apply).

  • WHEN_AUTHORIZED - Values are present in the output only if a user is authorized (sanitizing functions will apply).

For JMX, users are always considered to be authorized. For HTTP, users are considered to be authorized if they are authenticated and have the specified roles.

Sanitization for the QuartzEndpoint is also configurable in the same way.

Dependency Management for ANTLR 2 Removed

Dependency management for ANTLR 2 (antlr:antlr) has been removed as it was no longer required. If you are using ANTLR 2 in your application, specify a version that meets your needs.

Flyway Configuration Customization

FlywayConfigurationCustomizer beans are now called to customize the FluentConfiguration after any Callback and JavaMigration beans have been added to the configuration. An application that defines Callback and JavaMigration beans and adds callbacks and Java migrations using a customizer may have to be updated to ensure that the intended callbacks and Java migrations are used.

@EnableBatchProcessing No Longer Required

Previously, @EnableBatchProcessing could be used to enable Spring Boot?s auto-configuration of Spring Batch. It is no longer required and should be removed from applications that want to use Boot?s auto-configuration. A bean that is annotated with @EnableBatchProcessing or that extends Batch?s DefaultBatchConfiguration can now be defined to tell the auto-configuration to back off, allowing the application to take complete control of how Batch is configured.

Mongo Health Check

The HealthIndicator for MongoDB now supports MongoDB?s Stable API. The buildInfo query has been replaced with isMaster and the response now contains maxWireVersion instead of version. As described in the MongoDB documentation, clients may use maxWireVersion to help negotiate compatibility with MongoDB. Note that maxWireVersion is an integer.

Auto-configuration Registration

Spring Boot 2.7 introduced a new META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports file for registering auto-configurations, while maintaining backwards compatibility with registration in spring.factories. With this release, support for registering auto-configurations in spring.factories has been removed in favor of the imports file.

Minimum Requirements Changes

New and Noteworthy

Tip

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

Native Support

This milestone brings a number of improvements and compatibility for building an application as a Native image:

  • Hints for the default LDIF file is contributed.

  • The Maven native profile now longer sets a classifier for the repackaged archive.

  • Native testing is now supported.

Jersey Support Reinstated

In its 3.0.6 release, Jersey now supports Spring Framework 6. As a result, support for Jersey has been reinstated both for application code and actuator web endpoints.

@SpringBootTest with Main Methods

The @SpringBootTest annotation can now use the main of any discovered @SpringBootConfiguration class if it?s available. This means that any custom SpringApplication configuration performed by your main method can now be picked up by tests.

To use the main method for a test set the useMainMethod attribute of @SpringBootTest to UseMainMethod.ALWAYS or UseMainMethod.WHEN_AVAILABLE.

See the updated reference documentation for details.

Dependency Upgrades

Spring Boot 3.0.0-M5 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:

  • SnakeYAML 1.32

  • GraphQL Java 19.2

  • Postgresql 42.5

  • Maven Jar Plugin 3.3.0

  • Selenium 4.4.0

  • Selenium HtmlUnit 3.64.0

  • REST Assured 5.2.0

  • Rabbit AMQP Client 5.16.0

  • Rabbit Stream Client 0.7.0

  • Maven Shade Plugin 3.4.0

  • Mockito 4.8.0

Miscellaneous

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

  • Multiple hosts can now be configured for MongoDB using the spring.data.mongodb.additional-hosts property.

  • DiskSpaceHealthIndicator now includes its path in its log message and its health details.

  • WebJars resource handler path pattern can be customized using spring.mvc.webjars-path-pattern or spring.webflux.webjars-path-pattern.

  • Elasticsearch?s socketKeepAlive property can be configured using the spring.elasticsearch.socket-keep-alive property.

  • The spring.mvc.ignore-default-model-on-redirect has been deprecated to align with upstream Spring Framework changes.

Deprecations in Spring Boot 3.0

Spring Boot 3.0.0 M4 Release Notes

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0.0-M4-Release-Notes

For changes in earlier milestones, please refer to:

Upgrading from Spring Boot 2.x

Spring MVC and WebFlux URL matching changes

As of Spring Framework 6.0, the trailing slash matching configuration option has been deprecated and its default value set to false. This means that previously, the following controller would match both "GET /some/greeting" and "GET /some/greeting/":

@RestController
public class MyController {

  @GetMapping("/some/greeting")
  public String greeting {
    return "Hello";
  } 

}

As of this Spring Framework change, "GET /some/greeting/" doesn?t match anymore by default.

Developers should instead configure explicit redirects/rewrites through a proxy, a Servlet/web filter, or even declare the additional route explicitly on the controller handler (like @GetMapping("/some/greeting", "/some/greeting/") for more targeted cases.

Until your application fully adapts to this change, you can change the default with the following global configuration:

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
      configurer.setUseTrailingSlashMatch(true);
    }
  }
}

Hibernate 6.1

Spring Boot 3.0 uses Hibernate 6.1 by default. Please see the Hibernate 6.0 and 6.1 migration guides to learn how this may affect your application.

Dependency management and the spring-boot-starter-data-jpa starter have been updated to use the new org.hibernate.orm group ID for their Hibernate dependencies.

The spring.jpa.hibernate.use-new-id-generator-mappings configuration property has been removed as Hibernate no longer supports switching back to the old ID generator mappings.

Flyway 9.0

Spring Boot 3.0 uses Flyway 9.0 by default. Please see the Flyway release notes and blog post to learn how this may affect your application.

R2DBC 1.0

Spring Boot 3.0 uses R2DBC 1.0 by default. With the 1.0 release, R2DBC no longer publishes a bill of materials (bom) which has affected Spring Boot?s dependency management. The r2dbc-bom.version can no longer be used to override R2DBC?s version. In its place, several new properties for the individual and separately versioned modules are now available:

  • oracle-r2dbc.version (com.oracle.database.r2dbc:oracle-r2dbc)

  • r2dbc-h2.version (io.r2dc:r2dbc-h2)

  • r2dbc-pool.version (io.r2dc:r2dbc-pool)

  • r2dbc-postgres.version (io.r2dc:r2dbc-postgres)

  • r2dbc-proxy.version (io.r2dc:r2dbc-proxy)

  • r2dbc-spi.version (io.r2dc:r2dbc-spi)

Elasticsearch Clients and Templates

Support for Elasticsearch?s high-level REST client has been removed. In its place, auto-configuration for Elasticsearch?s new Java client has been introduced. Similarly, support for the Spring Data Elasticsearch templates that built on top of the high-level REST client has been removed. In its place, auto-configuration for the new templates that build upon the new Java client has been introduced. See the Elasticsearch section of the reference documentation for further details.

ReactiveElasticsearchRestClientAutoConfiguration

ReactiveElasticsearchRestClientAutoConfiguration has been renamed to ReactiveElasticsearchClientAutoConfiguration and has moved from org.springframework.boot.autoconfigure.data.elasticsearch to org.springframework.boot.autoconfigure.elasticsearch. Any auto-configuration exclusions or ordering should be updated accordingly.

YamlJsonParser Has Been Removed

YamlJsonParser has been removed as SnakeYAML?s JSON parsing was inconsistent with the other parser implementations. In the unlikely event that you were using YamlJsonParser directly, please migrate to one of the other JsonParser implementations.

ReactiveUserDetailsService

A ReactiveUserDetailsService is no longer auto-configured in the presence of an AuthenticationManagerResolver. If you application relies on ReactiveUserDetailService despite the presence of an AuthenticationManagerResolver, define your own ReactiveUserDetailsService bean that meets its needs.

Multiple Batch Jobs

Running multiple batch jobs is no longer supported. If the auto-configuration detects a single job is, it will be executed on startup. If multiple jobs are found in the context, a job name to execute on startup must be supplied by the user using the spring.batch.job.name property.

Spring Session Store Type

Explicitly configuring the store type for Spring session via spring.session.store-type is no longer supported. In case multiple session store repository implementations are detected on the classpath, a fixed order is used to determine which SessionRepository should be auto-configured. If Spring Boot?s defined ordering doesn?t meet your needs, you can define your own SessionRepository bean and cause the auto-configuration to back off.

Minimum Requirements Changes

Spring Boot 3.0.0-M4 makes the following changes to the minimum supported versions:

  • Gradle 7.5

  • Hibernate 6.1

  • Kotlin 1.7

New and Noteworthy

Tip

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

Native Image support

More use cases are supported in this milestone, including the actuator (including the use of a separate management context).

Making a PUT to Prometheus Push Gateway on Shutdown

The Push Gateway can be configured to perform a PUT on shutdown. To do so, set management.prometheus.metrics.export.pushgateway.shutdown-operation to put. Additionally, the existing push setting has been deprecated and post should now be used instead.

Hibernate Metrics Auto-configuration Reinstated

With the upgrade to Hibernate 6.1, its hibernate-micrometer module is now compatible with Jakarta EE 9. As a result, auto-configuration for Hibernate metrics has been reinstated.

Elasticsearch Java Client

Auto-configuration for the new Elasticsearch Java Client has been introduced. It can be configured using the existing spring.elasticsearch.* configuration properties.

Auto-configuration of JdkClientHttpConnector

In the absence of Reactor Netty, Jetty?s reactive client, and the Apache HTTP client a JdkClientHttpConnector will now be auto-configured. This allows WebClient to be used with the JDK?s HttpClient.

Dependency Upgrades

Spring Boot 3.0.0-M4 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:

Miscellaneous

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

  • Micrometer?s JvmCompilationMetrics are now auto-configured.

  • WebDriverScope and WebDriverTestExecutionListener have been made public to ease the use of WebDriver in custom test setup.

  • A DataSourceBuilder can now be derived from a wrapped DataSource.

  • Existing Kafka topics can be modified using spring.kafka.admin.modify-topic-configs.

  • Trusted proxies of Tomcat?s remote IP valve can be configured using server.tomcat.remoteip.trusted-proxies.

Deprecations in Spring Boot 3.0

  • The push setting of management.prometheus.metrics.export.pushgateway.shutdown-operation in favor of post.

  • @AutoConfigureMetrics has been deprecated in favor of @AutoConfigureObservability.

Spring Boot 3.0.0 M3 Release Notes

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0.0-M3-Release-Notes

For changes in earlier milestones, please refer to:

Upgrading from Spring Boot 2.x

Minimum Requirements Changes

None.

Actuator Metrics Export Properties

We have moved the properties controlling the actuator metrics export. The old schema was management.metrics.export.<product>, the new one is management.<product>.metrics.export (Example: the prometheus properties moved from management.metrics.export.prometheus to management.prometheus.metrics.export). If you are using the spring-boot-properties-migrator, you will get notified at startup. See #30381 for details.

Simplifed Main Class Name Resolution with Gradle

When building an application with Gradle, resolution of the name of the application?s main class has been simplified and made consistent. bootJar, bootRun, and bootWar now all resolve the name of the main class name by looking for it in the output of the main source set. This removes a small risk that the tasks may not have used the same main class name by default. If you were relying on the main class being resolved from a location outside of the main source set?s output, update your Gradle configuration to configure the main class name using the mainClass property of the springBoot DSL:

springBoot {
mainClass = "com.example.Application"
}

Alternatively, you can configure the classpath property of the resolveMainClassName task to search in locations other than the main source set?s output directories.

Running Your Application in the Maven Process

The fork attribute of spring-boot:run and spring-boot:start that was deprecated in Spring Boot 2.7 has been removed.

SAML2 Relying Party Configuration

Support for properties under spring.security.saml2.relyingparty.registration.{id}.identity-provider have been removed. Use the new properties under spring.security.saml2.relyingparty.registration.{id}.asserting-party as a replacement.

Embedded MongoDB

Auto-configuration and dependency management for Flapdoodle embedded MongoDB has been removed. If you are using embedded MongoDB for testing, use the auto-configuration library provided by the Flapdoodle project or modify the tests to use the Testcontainers project instead of embedded MongoDB.

Logging Date Format

The default format for the date and time component of log messages for Logback and Log4j2 has changed to align with the ISO-8601 standard. The new default format yyyy-MM-dd?T?HH:mm:ss.SSSXXX uses a T to separate the date and time instead of a space character and adds the timezone offset to the end. The LOG_DATEFORMAT_PATTERN environment variable or logging.pattern.dateformat property can be used to restore the previous default value of yyyy-MM-dd HH:mm:ss.SSS.

Support for Apache Solr Removed

Support for Apache Solr has been removed as its Jetty-based client, Http2SolrClient, is not compatible with Jetty 11.

Auto-configuration of Micrometer?s JvmInfoMetrics

Micrometer?s JvmInfoMetrics is now auto-configured. Any manually configured JvmInfoMetrics bean definition can be removed.

New and Noteworthy

Tip

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

Reinstated Support for REST Assured

With its 5.0 release, REST Assured is compatible with Jakarta EE 9 and Groovy 4.0. As a result, support has been reinstated.

Reinstated Support for Pooled JMS

With its 5.0 release, Pooled JMS is compatible with Jakarta EE 9. As a result, support has been reinstated and can be used with Apache Artemis by setting spring.artemis.pool.enabled to true.

Auto-configuration for Micrometer Observation API

Spring Boot now auto-configures an instance of ObservationRegistry for you. If micrometer-core is on the classpath, a TimerObservationHandler is registered on the ObservationRegistry, which means that every stopped Observation leads to a timer. ObservationPredicate, GlobalTagsProvider and ObservationHandler are automatically registered on the ObservationRegistry. You can use ObservationRegistryCustomizer to further customize the ObservationRegistry if you need to. See #29666 for details.

Auto-configuration for Micrometer Tracing

Spring Boot now auto-configures Micrometer Tracing for you. This includes support for Brave, OpenTelemetry, Zipkin and Wavefront. When using the Micrometer Observation API, finishing observations will lead to spans reported to Zipkin or Wavefront. Tracing can be controlled with properties under management.tracing. Zipkin can be configured with management.zipkin.tracing, while Wavefront uses management.wavefront. To use, for example Wavefront with Brave, these dependencies are needed:

implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-tracing-bridge-brave'
implementation 'io.micrometer:micrometer-tracing-reporter-wavefront'

Auto-configuration for Micrometer?s OtlpMeterRegistry

An OtlpMeterRegistry is now auto-configured when io.micrometer:micrometer-registry-otlp is on the classpath. The meter registry can be configured using management.otlp.metrics.export.* properties.

Enabling Async Acks with Apache Kafka

A new configuration property, spring.kafka.listener.async-acks, for enabling async acks with Kafka has been added. To enable async acks, set the property to true. The property only applies when spring.kafka.listener.async-mode is set to manual or manual-immediate.

Dependency Upgrades

Spring Boot 3.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:

  • Flyway 8.5.11

  • Hibernate 5.6.9.Final

  • Micrometer 1.10.0-M2

  • Micrometer Tracing 1.0.0-M5

  • Netty 4.1.77.Final

  • Reactor Bom 2022.0.0-M2

  • Thymeleaf 3.1.0.M2

  • Tomcat 10.0.21

Miscellaneous

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

  • Bean Validation Configuration can now be customised by defining a ValidationConfigurationCustomizer bean.

  • Log4j2?s Log4jBridgeHandler is now used to route JUL-based logging into Log4j2 rather than routing through SLF4J.

Deprecations in Spring Boot 3.0

  • The properties management.metrics.export.<product> are deprecated, the replacement is management.<product>.metrics.export. See above for more details.

Spring Boot 3.0.0 M2 Release Notes

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0.0-M2-Release-Notes

For changes in earlier milestones, please refer to:

Upgrading from Spring Boot 2.x

Minimum Requirements Changes

Spring Boot 3.0 M2 makes the following changes to its minimum supported versions:

  • Groovy 4.0

RxJava Dependency Management

Dependency management for RxJava 1.x and 2.x has been removed and dependency management for RxJava 3 has been added in its place.

Image Banner Support Removed

Support for image-based application banners has been removed. banner.gif, banner.jpg, and banner.png files are now ignored and should be replaced with a text-based banner.txt file.

Micrometer binders

The Micrometer team moved the binders to a separate micrometer module named micrometer-binders. To prevent split packages, the imports have changed, too. If you are using the old binders, please adjust your imports from io.micrometer.core.instrument.binder to io.micrometer.binder.

@ConstructingBinding No Longer Needed at the Type Level

@ConstructorBinding is no longer needed at the type level on @ConfigurationProperties classes and should be removed. When a class or record has multiple constructors, it may still be used on a constructor to indicate which one should be used for property binding.

New and Noteworthy

Tip

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

Reinstated Support for EhCache 3

Support for EhCache 3 has been reinstated as it is now compatible with Jakarta EE 9.

Support has been added in a separate artifact. To use it your application, make sure to add the dependency with the jakarta classifier.

Reinstated Support for H2 Console

Support for H2?s Console has been reinstated as it is now compatible with Jakarta EE 9.

Improved @ConstructorBinding Detection

When using constructor bound @ConfigurationProperties the @ConstructorBinding annotation is no longer required if the class has a single parameterized constructor. If you have more than one constructor, you?ll still need to use @ConstructorBinding to tell Spring Boot which one to use.

For most users, this updated logic will allow for simpler @ConfigurationProperties classes. If, however, you have a @ConfigurationProperties and you want to inject beans into the constructor rather than binding it, you?ll now need to add an @Autowired annotation.

Dependency Upgrades

Spring Boot 3.0.0-M2 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:

  • Groovy 4.0

  • Thymeleaf Layout Dialect 3.1

Deprecations in Spring Boot 3.0

  • None

Spring Boot 3.0.0 M1 Release Notes

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0.0-M1-Release-Notes

Upgrading from Spring Boot 2.x

Deprecations from Spring Boot 2.x

Classes, methods and properties that were deprecated in Spring Boot 2.x have been removed in this release. Please ensure that you aren?t calling deprecated methods before upgrading.

Minimum Requirements Changes

Spring Boot 3.0 makes the following changes to its minimum supported versions:

  • Gradle 7.3

  • Jakarta EE 9

  • Java 17

  • Kotlin 1.6

  • Spring Framework 6

Jakarta EE 9

Where Spring Boot depends upon a Jakarta EE specification, 3.0 has upgraded to the version that is included in Jakarta EE 9. For example, Spring Boot 3.0 uses the Servlet 5.0 and JPA 3.0 specifications.

To differentiate between modules that support Jakarta EE 8 and modules that support Jakarta EE 9, some projects have published their Jakarta EE 9-compatible modules with different artifact IDs. For example, Undertow uses a -jakartaee9 suffix and Hibernate uses -jakarta. Generally speaking, Spring Boot?s starter modules should handle this change for you. If you are declaring dependencies on third-party modules directly, you may need to update your dependency declarations to use the EE 9-compatible artifact IDs.

As part of this upgrade to Jakarta EE 9, support for some dependencies has been reduced or removed where support was not available. We hope to reinstate support as the ecosystem gradually adapts to the new package names in Jakarta EE 9. In the meantime, support for the following has been removed:

  • EhCache 3

  • H2?s web console

  • Hibernate?s metrics

  • Infinispan

  • Jolokia

  • Pooled JMS

  • REST Assured

  • SMTP appending with Logback

  • SMTP appending with Log4j 2

Jersey

Support for Jersey has been temporarily removed as it does not yet support Spring Framework 6.

Removed Support

Support for the following dependencies has been removed in Spring Boot 3.0:

  • Apache ActiveMQ

  • Atomikos

  • EhCache 2

  • Hazelcast 3

JSON-B

Dependency management for Apache Johnzon has been removed in favor of Eclipse Yasson. A Jakarta EE 9-compatible version of Apache Johnzon can be used with Spring Boot 3, but you will now have to specify a version in your dependency declaration.

New and Noteworthy

Tip

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

Dependency Upgrades

Spring Boot 3.0.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:

  • Artemis 2.20.0

  • Hazelcast 5.0

  • Hibernate Validator 7.0

  • Jakarta Activation 2.0

  • Jakarta Annotation 2.0

  • Jakarta JMS 3.0

  • Jakarta JSON 2.0

  • Jakarta JSON Bind 3.0

  • Jakarta Mail 2.0

  • Jakarta Persistence 3.0

  • Jakarta Servlet 5.0

  • Jakarta Servlet JSP JSTL 2.0

  • Jakarta Transaction 2.0

  • Jakarta Validation 3.0

  • Jakarta WebSocket 2.0

  • Jakarta WS RS 3.0

  • Jakarta XML Bind 3.0

  • Jakarta XML Soap 2.0

  • Jetty 11

  • jOOQ 3.16

  • Tomcat 10

Miscellaneous

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

  • Support for Java?s SecurityManager has been removed following its deprecation in the JDK

  • Support for Spring Framework?s CommonsMultipartResolver has been removed following its removal in Spring Framework 6

Deprecations in Spring Boot 3.0

  • None
@fabapp2 fabapp2 closed this as not planned Won't fix, can't repro, duplicate, stale Aug 31, 2023
@fabapp2 fabapp2 added archived and removed epic labels Aug 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
3.0.0 Spring Boot 3.0.0 archived
Projects
None yet
Development

No branches or pull requests

1 participant