关于java:这可能是最全的SpringBoot3新版本变化了

59次阅读

共计 6057 个字符,预计需要花费 16 分钟才能阅读完成。

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

2.7 版本升级指南

官网提供了一个从 2.7 版本升级到 3.0 的指南:https://github.com/spring-pro…,官网倡议在降级到 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…

三方包降级

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

该版本中降级的其余 Spring 我的项目包含:

  • Spring AMQP 3.0.
  • Spring Batch 5.0.
  • Spring Data 2022.0-Release-Notes).
  • 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…。

配置文件加强

比方上面针对不同环境的配置形式。

<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 就能够创立 metricstrace,新版本 SpringBoot 当初将会主动拆卸 ObservationRegistry,并且能够应用ObservationRegistryCustomizer 进一步定制化ObservationRegistry

能够参考官网文档:https://docs.spring.io/spring…

Micrometer Tracing 主动拆卸

SpringBoot 当初主动拆卸 Micrometer Tracing,包含对 Brave, OpenTelemetry, Zipkin 和 Wavefron 的反对。

另外,当引入 io.micrometer:micrometer-registry-otlp 包之后,OtlpMeterRegistry也会主动拆卸。

细节参考官网文档:https://docs.spring.io/spring…

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-patternspring.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 时,RabbitStreamTemplateEnvironment 当初将主动拆卸,无论 spring.rabbitmq.listener.type 是否是 stream
  • 已有的 Kafka 主题能够应用 spring.kafka.admin.modify-topic-configs 进行批改。
  • WebDriverScopeWebDriverTestExectionListener 当初是 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 上的无参构造函数已被弃用。
  • DefaultTestExecutionListenersPostProcessorSpringBootDependencyInjectionTestExecutionListener 已被弃用,转而应用 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-pro…,如有谬误,请指出,谢谢。

正文完
 0