这可能是最全的SpringBoot3新版本变化了!
创始人
2024-02-27 03:07:38

11月24号,Spring Boot 3.0 发布了第一个正式的 GA 版本,一起看看新版本到底有哪些变化。

2.7版本升级指南

官方提供了一个从 2.7 版本升级到 3.0 的指南:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Migration-Guide,官方建议在升级到 Spring Boot 3.0 之前先升级到 Spring Boot 2.7。

新的变化

基于Java17和支持Java19

Spring Boot 3.0 使用 Java 17作为最低版本,如果你目前使用的是 Java 8或 Java 11,那么需要升级先升级 JDK,并且新版本已通过 JDK 19 进行了测试。

GraalVM支持

Spring Native 也是升级的一个重大特性,支持使用 GraalVM 将 Spring 的应用程序编译成本地可执行的镜像文件,可以显著提升启动速度、峰值性能以及减少内存使用。

关于 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 项目包括:

  • • 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.0

  • • Spring Session 2022.0

  • • Spring WS 4.0.

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

  • • Jakarta Activation 2.1

  • • Jakarta JMS 3.1

  • • Jakarta JSON 2.1

  • • Jakarta JSON Bind 3.0

  • • Jakarta Mail 2.1

  • • Jakarta Persistence 3.1

  • • Jakarta Servlet 6.0

  • • Jakarta Servlet JSP JSTL 3.0

  • • Jakarta Transaction 2.0

  • • Jakarta Validation 3.0

  • • Jakarta WebSocket 2.1

  • • Jakarta WS RS 3.1

  • • Jakarta XML SOAP 3.0

  • • Jakarta XML WS 4.0

另外,还升级了第三方 jar 包的最新稳定版本,其中一些值得注意的依赖升级包括:

  • • Couchbase Client 3.4

  • • Elasticsearch Client 8.5

  • • Flyway 9

  • • Groovy 4.0

  • • Hibernate 6.1

  • • Hibernate Validator 8.0

  • • Jackson 2.14

  • • Jersey 3.1

  • • Jetty 11

  • • jOOQ 3.16

  • • Kotlin 1.7.20

  • • Liquibase 4.13

  • • Lettuce 6.2

  • • Log4j 2.18

  • • Logback 1.4

  • • Micrometer 1.10

  • • Micrometer Tracing 1.0

  • • Neo4j Java Driver 5.2

  • • Netty 4.1.77.Final

  • • OkHttp 4.10

  • • R2DBC 1.0

  • • Reactor 2022.0

  • • SLF4J 2.0

  • • SnakeYAML 1.32

  • • Tomcat 10

  • • Thymeleaf 3.1.0.M2

  • • Undertow 2.2.20.Final

Log4j2增强

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

配置文件增强

比如下面针对不同环境的配置方式。

Spring 环境属性增强

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

${spring:spring.application.name}

系统属性增强

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,将会自动装配SpanContextSupplierSpanContextSupplier将会把 metrics 关联到 trace,因为它会把当前的 traceID 和 spanID 保存到 Prometheus 的 Example 中。

更灵活的Spring Data JDBC装配

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

  • • 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

Kafka异步ACK支持

现在可以通过设置spring.kafka.listener.async-acks=true来开启 Kafka 的异步 ACK,并且需要设置spring.kafka.listener.async-modemanual 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注解,但是需要将@SpringBootTestuseMainMethod属性设置为UseMainMethod.ALWAYS 或者UseMainMethod.WHEN_AVAILABLE

杂七杂八

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

  • • 在应用程序启动时候不再记录Host Name,可以提高启动速度,缩短网络查找的耗时

  • • 移除了对 SecurityManager 的支持。

  • • 在Spring Framework6中移除CommonsMultipartResolver之后,对它的支持也被移除了。

  • • 为了保持和 Spring6 版本一致,不再推荐使用spring.mvc.ignore-default-model-on-redirect

  • • Web 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 注释属性。

  • • RestTemplateExchangeTagsProviderWebClientExchangeTagsProviderWebFluxTagsProviderWebMvcTagsProvider和相关类已经被ObservationConvention所取代。

  • • HealthContributor@Configuration 上的无参构造函数已被弃用。

  • • DefaultTestExecutionListenersPostProcessor 和 SpringBootDependencyInjectionTestExecutionListener 已被弃用,转而使用 Spring 框架的 ApplicationContextFailureProcessor

  • • 不推荐使用 management.metrics.export.,推荐使用 management..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,如有错误,请指出,谢谢。

往期推荐

我服了!SpringBoot升级后这服务我一个星期都没跑起来!(下)

SpringBoot3正式版将于11月24日发布:都有哪些新特性?

我服了!SpringBoot升级后这服务我一个星期都没跑起来!(上)

NB的Github项目,看到最后一个我惊呆了!

我摊牌了!真正的灰度队列实现方案!全网你都搜不到!

10分钟教你写一个数据库

相关内容

热门资讯

应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...