目录
参考Spring Boot 3.0 发行说明 ·spring-projects/spring-boot Wiki ·GitHub
11.JdkClientHttpConnector 自动装配
参考Spring Boot 3.0 发行说明 ·spring-projects/spring-boot Wiki ·GitHub
1.环境要求
- Spring Boot3要求JDK17作为最低版本。
- 如果你要使用 Native Image 特性,要使用 GraalVM 22.3 以上和 Native Build Tools Plugin 0.9.17 或更高的版本。GraalVM 是 Oracle 在 2018 年发布的一个全新的通用全站虚拟机,并具有高性能、跨语言交互等逆天特性,支持云原生,官网:GraalVM。
- SpringBoot3底层默认依赖Spring6。
- 以 Jakarta EE 9 为基准并支持 Jakarta EE 10,由于 Java EE 已经变更为 Jakarta EE,包名以 javax开头的需要相应地变更为jakarta,如javax.servlet.*,修改为jakarta.servlet.*。
- Maven支持也提高到了3.5、Gradle提高到了7.3。版本管理器默认也换成了Gradle。
- 支持Tomcat10版本,此版本实现了Jakarta EE 10 平台的一部分规范。在 Tomcat 9 及更早版本上运行的应用程序如果不进行更改,将无法在 Tomcat 10 上运行。修改方法见Tomcat 中文官网 下载 安装 (p2hp.com)
- Spring Boot 管理的大量第三方的技术依赖也有大幅度的的升级,具体可以参考官方版本发布文档:Releases · spring-projects/spring-boot · GitHub
- 在 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
。
Micrometer 追踪
SpringBoot 现在自动装配Micrometer Tracing ,包括对 Brave, OpenTelemetry, Zipkin 和 Wavefron 的支持。
另外,当引入io.micrometer:micrometer-registry-otlp
包之后, OtlpMeterRegistry
也会自动装配。
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,将会自动装配SpanContextSupplier
,SpanContextSupplier
将会把 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-mode
为manual
或者 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
注解,但是需要将@SpringBootTest
的useMainMethod
属性设置为UseMainMethod.ALWAYS
或者UseMainMethod.WHEN_AVAILABLE
。
除了上面列出的更改外,还有一些小的调整和优化详见官网说明。