这可能是最全的SpringBoot3新版本变化了!

荔枝岛岛主
发布于 2023-9-27 10:44
浏览
0收藏

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。

配置文件增强

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

<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.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-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-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 注释属性。
  • ​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,如有错误,请指出,谢谢。​




文章转载自公众号:艾小仙

分类
已于2023-9-27 10:44:46修改
收藏
回复
举报
回复
    相关推荐