Spring Boot3新特性

目录

参考Spring Boot 3.0 发行说明 ·spring-projects/spring-boot Wiki ·GitHub

1.环境要求

 2.提高应用可观察性

Micrometer 升级

Micrometer 追踪

3.自动配置文件变更

4.支持 GraalVM 原生镜像

5. Log4j2 增强功能

6.@ConstructorBinding检测优化

7.Prometheus 监控支持

8.更灵活的Spring Data JDBC装配

9.Kafka异步ACK支持 

10. 新的Elasticsearch JAVA客户端支持

11.JdkClientHttpConnector 自动装配

12.@SpringBootTest优化升级


参考Spring Boot 3.0 发行说明 ·spring-projects/spring-boot Wiki ·GitHub

1.环境要求

  1. Spring Boot3要求JDK17作为最低版本。
  2. 如果你要使用 Native Image 特性,要使用 GraalVM 22.3 以上和 Native Build Tools Plugin 0.9.17 或更高的版本。GraalVM 是 Oracle 在 2018 年发布的一个全新的通用全站虚拟机,并具有高性能、跨语言交互等逆天特性,支持云原生,官网:GraalVM
  3. SpringBoot3底层默认依赖Spring6。
  4. 以 Jakarta EE 9 为基准并支持 Jakarta EE 10,由于 Java EE 已经变更为 Jakarta EE,包名以 javax开头的需要相应地变更为jakarta,如javax.servlet.*,修改为jakarta.servlet.*。
  5. Maven支持也提高到了3.5、Gradle提高到了7.3。版本管理器默认也换成了Gradle。
  6. 支持Tomcat10版本,此版本实现了Jakarta EE 10 平台的一部分规范。在 Tomcat 9 及更早版本上运行的应用程序如果不进行更改,将无法在 Tomcat 10 上运行。修改方法见Tomcat 中文官网 下载 安装 (p2hp.com)
  7. Spring Boot 管理的大量第三方的技术依赖也有大幅度的的升级,具体可以参考官方版本发布文档:Releases · spring-projects/spring-boot · GitHub
  8. 在 Spring Boot 3.0 中,一些配置属性被重新命名/删除了,开发人员需要相应地更新他们的application.properties或者application.yml。为了帮助你做到这一点,Spring Boot 3.0 提供了一个spring-boot-properties-migrator模块。一旦作为依赖关系添加到你的项目中,它不仅会在启动时分析你的应用程序的环境并打印诊断结果,而且还会在运行时为你临时迁移属性。把下面这个加入pom.xml以帮助你升级兼容配置属性:
    <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-properties-migrator</artifactId>
     <scope>runtime</scope>
    </dependency>
    
    

    完成迁移之后,务必要移除spring-boot-properties-migrator依赖。

 2.提高应用可观察性

Spring Boot 3.0 通过 Micrometer 和 Micrometer 追踪提高应用可观察性,支持集成 Micrometer 1.10+,引入了的全新的可观察 API 并自动配置 Micrometer 追踪,包括对 Brave、OpenTelemetry、Zipkin 和 Wavefront 组件的支持。

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 追踪

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

3.自动配置文件变更

Spring Boot 2.7 引入了一个新的文件:
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
用于注册自动配置,同时保持与 spring.factories 中注册的向后兼容。Spring Boot 3.0 发布后,spring.factories已经被移除,只能通过imports文件来注册自动配置。

4.支持 GraalVM 原生镜像

GraalVM 是 Oracle 在 2018 年发布的一个全新的通用全栈虚拟机,并具有高性能、跨语言交互等逆天特性,不仅支持了 Java、Scala、Groovy、Kotlin 等基于 JVM 的语言,以及 C、C++ 等基于 LLVM 的语言,还支持其他像 JavaScript、Ruby、Python 和 R 语言等。

Spring Boot 3.0 应用现在可以支持转换为 GraalVM 原生镜像了,这可以提供显著的内存和启动性能改进,能支持 GraalVM 原生镜像也是整个 Spring 产品组合中的一项重大能力的提升。

Spring Boot 3.0 最低支持 Graal 22.3+ 和 Native Build Tools Plugin 0.9.17+。

Spring Boot 3.0 支持 GraalVM 原生镜像后,它甚至取代了实验性的 Spring Native 项目。

5. Log4j2 增强功能

Log4j2 支持已更新为提供以下功能的新扩展:

  • 配置文件增强

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

       <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 中。

有关详细信息,请参阅更新的文档

6.@ConstructorBinding检测优化

以前如果希望属性绑定到类中,我们通过使用@ConfigurationProperties@ConstructorBinding注解可以做到。

新版本针对该注解做了优化,当使用构造函数绑定@ConfigurationProperties 时,如果类只有一个参数的构造函数,则不再需要@ConstructorBinding注解。

如果有多个构造函数,那么仍然需要使用@ConstructorBinding来告诉 Spring Boot 应该使用哪个构造函数。

7.Prometheus 监控支持

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

8.更灵活的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

9.Kafka异步ACK支持 

现在可以通过设置spring.kafka.listener.async-acks=true来开启 Kafka 的异步 ACK,并且需要设置spring.kafka.listener.async-modemanual 或者 manual-immediate

10. 新的Elasticsearch JAVA客户端支持

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

11.JdkClientHttpConnector 自动装配

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

12.@SpringBootTest优化升级

现在任何@SpringBootConfiguration中的main方法都可以使用@SpringBootTest注解,但是需要将@SpringBootTestuseMainMethod属性设置为UseMainMethod.ALWAYS 或者UseMainMethod.WHEN_AVAILABLE

除了上面列出的更改外,还有一些小的调整和优化详见官网说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值