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

2.7版别晋级攻略

官方供给了一个从 2.7 版别晋级到 3.0 的攻略:github.com/spring-proj… 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 运用能够参阅:docs.spring.io/spring-boot…

三方包晋级

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 的扩展支撑,具体如下,也能够参阅官方文档:docs.spring.io/spring-boot…

装备文件增强

比方下面针对不同环境的装备方法。

<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

能够参阅官方文档:docs.spring.io/spring-boot…

Micrometer Tracing 主动安装

SpringBoot 现在主动安装Micrometer Tracing ,包括对 Brave, OpenTelemetry, Zipkin 和 Wavefron 的支撑。

别的,当引入io.micrometer:micrometer-registry-otlp包之后, OtlpMeterRegistry也会主动安装。

细节参阅官方文档:docs.spring.io/spring-boot…

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:github.com/spring-proj…

本文正在参与「金石计划 . 分割6万现金大奖」