关于 GraalVM 利用可以参考:https://docs.spring.io/spring-boot/docs/3.0.0-SNAPSHOT/reference/html/native-image.html#native-image

三方包升级

Spring Boot 3.0 构建基于 Spring Framework 6 之上,须要利用 Spring Framework 6。

该版本中升级的其他 Spring 项目包括:

jsp30这可能是最全的SpringBoot3新版本变更了 CSS

Spring AMQP 3.0.Spring Batch 5.0.Spring Data 2022.0.Spring GraphQL 1.1.Spring HATEOAS 2.0.Spring Integration 6.0.Spring Kafka 3.0.Spring LDAP 3.0.Spring REST Docs 3.0.Spring Retry 2.0.Spring Security 6.0Spring Session 2022.0Spring WS 4.0.

Spring Boot 3.0 已经从 Java EE 升级为 JakartaEE API。
尽可能选择 JakartaEE10 兼容的依赖:

Jakarta Activation 2.1Jakarta JMS 3.1Jakarta JSON 2.1Jakarta JSON Bind 3.0Jakarta Mail 2.1Jakarta Persistence 3.1Jakarta Servlet 6.0Jakarta Servlet JSP JSTL 3.0Jakarta Transaction 2.0Jakarta Validation 3.0Jakarta WebSocket 2.1Jakarta WS RS 3.1Jakarta XML SOAP 3.0Jakarta XML WS 4.0

其余,还升级了第三方 jar 包的最新稳定版本,个中一些值得把稳的依赖升级包括:

Couchbase Client 3.4Elasticsearch Client 8.5Flyway 9Groovy 4.0Hibernate 6.1Hibernate Validator 8.0Jackson 2.14Jersey 3.1Jetty 11jOOQ 3.16Kotlin 1.7.20Liquibase 4.13Lettuce 6.2Log4j 2.18Logback 1.4Micrometer 1.10Micrometer Tracing 1.0Neo4j Java Driver 5.2Netty 4.1.77.FinalOkHttp 4.10R2DBC 1.0Reactor 2022.0SLF4J 2.0SnakeYAML 1.32Tomcat 10Thymeleaf 3.1.0.M2Undertow 2.2.20.FinalLog4j2增强

这次升级,包含了一些对 Log4j2 的扩展支持,详细如下,也可以参考官方文档:https://docs.spring.io/spring-boot/docs/3.0.0-SNAPSHOT/reference/html/features.html#features.logging.log4j2-extensions。

配置文件增强

比如下面针对不同环境的配置办法。

<SpringProfile name="staging"> <!-- configuration to be enabled when the "staging" profile is active --> </SpringProfile> <SpringProfile name="dev | staging"> <!-- configuration to be enabled when the "dev" or "staging" profiles are active --> </SpringProfile> <SpringProfile name="!production"> <!-- configuration to be enabled when the "production" profile is not active --> </SpringProfile>

Spring 环境属性增强

支持在 Log4j2配置中引用 Spring 环境中的属性,利用 Spring: 前缀。

<Properties> <Property name="applicationName">${spring:spring.application.name}</property></Properties>

系统属性增强

Log4j2现在支持更多可配置的 System.properties 。
比如,可以利用 log4j2.skipJansi 系统属性来配置 Console Appender 是否在 Windows 上利用 Jansi 输出流。

在 Log4j2 初始化之后加载的所有System.properties都可以从 SpringEnvironment 拿到。
比如上面的举例一样,可以把log4j2.skipJansi = false 配置到 application.properties 中。

@ConstructorBinding检测优化

以前如果希望属性绑定到类中,我们通过利用@ConfigurationProperties和@ConstructorBinding表明可以做到。

新版本针对该表明做了优化,当利用布局函数绑定@ConfigurationProperties 时,如果类只有一个参数的布局函数,则不再须要@ConstructorBinding表明。

如果有多个布局函数,那么仍旧须要利用@ConstructorBinding来见告 Spring Boot 该当利用哪个布局函数。

Micrometer 升级

Spring Boot 3.0 支持 Micrometer 1.10 中引入的新的 Observation API,新的 ObservationRegistry供应一个 API 就可以创建 metrics和 trace,新版本 SpringBoot 现在将会自动装置ObservationRegistry,并且可以利用ObservationRegistryCustomizer进一步定制化ObservationRegistry。

可以参考官方文档:https://docs.spring.io/spring-boot/docs/3.0.0-SNAPSHOT/reference/html/actuator.html#actuator.observability

Micrometer Tracing 自动装置

SpringBoot 现在自动装置Micrometer Tracing ,包括对 Brave, OpenTelemetry, Zipkin 和 Wavefron 的支持。

其余,当引入io.micrometer:micrometer-registry-otlp包之后, OtlpMeterRegistry也会自动装置。

细节参考官方文档:https://docs.spring.io/spring-boot/docs/3.0.0-SNAPSHOT/reference/html/actuator.html#actuator.micrometer-tracing

Prometheus 支持

如果存在 Prometheus 依赖和 Tracer Bean,将会自动装置SpanContextSupplier,SpanContextSupplier将会把 metrics 关联到 trace,由于它会把当前的 traceID 和 spanID 保存到 Prometheus 的 Example 中。

更灵巧的Spring Data JDBC装置

Spring Data JDBC的自动装置现在更加灵巧,Spring Data JDBC 所需的几个自动装置的 Bean现在是有条件的,可以通过定义相同类型的Bean来更换,可以更换的Bean类型如下:

org.springframework.data.jdbc.core.JdbcAggregateTemplateorg.springframework.data.jdbc.core.convert.DataAccessStrategyorg.springframework.data.jdbc.core.convert.JdbcConverterorg.springframework.data.jdbc.core.convert.JdbcCustomConversionsorg.springframework.data.jdbc.core.mapping.JdbcMappingContextorg.springframework.data.relational.RelationalManagedTypesorg.springframework.data.relational.core.dialect.DialectKafka异步ACK支持

现在可以通过设置spring.kafka.listener.async-acks=true来开启 Kafka 的异步 ACK,并且须要设置spring.kafka.listener.async-mode为manual or manual-immediate。

新的Elasticsearch JAVA客户端支持

支持新版本的 ES JAVA 客户端自动装置,可以通过属性spring.elasticsearch.来配置。

JdkClientHttpConnector 自动装置

如果没有 Netty Reactor、Jetty reactive client 和 Apache HTTP client ,将自动装置JdkClientHttpConnector,这许可WebClient和 JDK 的HttpClient一起利用。

@SpringBootTest优化升级

现在任何@SpringBootConfiguration中的main方法都可以利用@SpringBootTest表明,但是须要将@SpringBootTest的useMainMethod属性设置为UseMainMethod.ALWAYS 或者UseMainMethod.WHEN_AVAILABLE。

杂七杂八

除了上面列出的改变之外,还有一些小的调度和优化,包括:

在运用程序启动时候不再记录Host Name,可以提高启动速率,缩短网络查找的耗时移除了对 SecurityManager 的支持。
在Spring Framework6中移除CommonsMultipartResolver之后,对它的支持也被移除了。
为了保持和 Spring6 版本同等,不再推举利用spring.mvc.ignore-default-model-on-redirectWeb Jar 资源处理器 path pattern 可以利用参数spring.mvc.webjars-path-pattern 、 spring.webflux.webjars-path-pattern自定义Tomcat 远程 IP 阀的可信代理可以利用 server.Tomcat.Remoteip.trust-proxy 配置。
可以通过定义 ValidationConfigurationCustomizer 来自定义 Bean 的校验。
Log4j2的 Log4jBridgeHandler 现在用于将基于 JUL 的日志路由到 Log4j2,而不是通过 SLF4J 路由。
实现 MeterBinder 接口的 Bean 现在只有在所有单例 Bean 初始化之后才绑定到meter registries。
用于 Brave 和 OpenTelemetry 的 SpanCustomizer bean 现在会自动装置Micrometer 的 JvmCompilationMetrics 现在会自动装置。
DiskSpaceHealthIndicator 现在其日志中包含路径及其康健详细信息。
现在可以从包装的 DataSource 派生 DataSourceBuilder。
现在可以利用 spring.data.mongodb.additional-hosts 属性为 MongoDB 配置多个 host。
可以利用 spring.elasticsearch.socket-keep-alive 属性配置 Elasticsearch 的 socketKeepAlive 属性。
在利用 spring-rabbit-stream 时,RabbitStreamTemplate 和 Environment 现在将自动装置,无论 spring.rabbitmq.listener.type 是否是 stream。
已有的 Kafka 主题可以利用 spring.kafka.admin.modify-topic-configs 进行修正。
WebDriverScope 和 WebDriverTestExectionListener 现在是 public,以方便在自定义测试配置中利用 WebDriver。
弃用功能ConstructorBinding 已经从 org.springframework.boot.context.properties 包修正为 org.springframework.boot.context.properties.bind。
已不推举利用基于 JsonMixinModule 扫描的布局函数。
ClientHttpRequestFactorySupplier 该当更换为 ClientHttpRequestFactories。
不再支持 Cookie 注释属性。
RestTemplateExchangeTagsProvider, WebClientExchangeTagsProvider, WebFluxTagsProvider, WebMvcTagsProvider和干系类已经被ObservationConvention所取代。
HealthContributor@Configuration 上的无参布局函数已被弃用。
DefaultTestExecutionListenersPostProcessor 和 SpringBootDependencyInjectionTestExecutionListener 已被弃用,转而利用 Spring 框架的 ApplicationContextFailureProcessor。
不推举利用 management.metrics.export.<product>,推举利用 management.<product>.metrics.export。
management.prometheus.metrics.export.pushgateway.shutdown-operation支持 POST@AutoConfigureMetrics 已被弃用,推举利用@AutoConfigureObservability。

大部分内容翻译、修正自官方Release Notes:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes,如有缺点,请指出,感激。