springboot3.0带来的新特性

Springboot3.0新特性解读

官网

https://spring.io

版本信息查看

https://start.spring.io/actuator/info

发行说明

Spring Boot 3.0 Release Notes · spring-projects/spring-boot Wiki · GitHub

从 Spring Boot 2.7 升级

由于这是 Spring Boot 的一个主要版本,因此升级现有应用程序可能比平时更复杂一些。我们整理了一份专门的迁移指南,以帮助您升级现有的 Spring Boot 2.7 应用程序。

如果您当前运行的是早期版本的 Spring Boot,我们强烈建议您先升级到 Spring Boot 2.7,然后再迁移到 Spring Boot 3.0。

2.7~3.0版本更新

新的配置和值得注意的

springboot3.0后相关配置修改(废弃,默认值变更,key修改)

Java 17 基线和 Java 19 支持

Spring Boot 3.0 要求 Java 17 作为最低版本。如果您当前使用的是 Java 8 或 Java 11,则需要先升级 JDK,然后才能开发 Spring Boot 3.0 应用程序。

Spring Boot 3.0 也运行良好,并已通过 JDK 19 测试。

jdk17下载安装

Java Downloads | Oracle

https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe

GraalVM 基线和本机构建工具

Spring Boot 需要 Graal 22.3 或更高版本和 Native Build Tools Plugin 0.9.17 或更高版本

ps: 更好的支持云原生,打出镜像更小(不依赖jvm),启动的更快(预编译)

官网:https://www.graalvm.org

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

第三方库升级

Spring Boot 3.0 基于并需要 Spring Framework 6。您可能想阅读Spring Framework 6.0 中可用的新功能

此版本中升级的其他 Spring 项目包括:

支持Jakarta EE 10

包名javax改为jakarta (捐献给了 eclipse进行维护,因此包名需要进行修改)

Spring Boot 3.0 已将所有依赖项从 Java EE 迁移到 Jakarta EE API。尽可能选择 Jakarta EE 10 兼容依赖项,包括:

  • 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 的最新稳定版本。这里一些值得注意的依赖项升级包括:

支持Tomcat 10.x版本

http://tomcat.p2hp.com

Apache Tomcat项目很自豪地宣布Apache Tomcat10.1.1版本的发布。此版本实现了Jakarta EE 10 平台的一部分规范。在 Tomcat 9 及更早版本上运行的应用程序如果不进行更改,将无法在 Tomcat 10 上运行。为 Tomcat 9 及更早版本设计的基于 Java EE 的应用程序可以放在$CATALINA_BASE/webapps-javaee 目录中,Tomcat 会自动将它们转换为Jakarta EE 并将它们复制到 web 应用程序目录。此转换是使用 Jakarta EE工具的Apache Tomcat迁移工具 执行的,该工具也可单独下载 以供离线使用。

GraalVM 本机图像支持

Spring Boot 3.0 应用程序现在可以转换为 GraalVM 原生镜像,这可以提供显着的内存和启动性能改进。支持 GraalVM Native Images 是整个 Spring 产品组合中的一项重大工程工作。

要开始使用 GraalVM 原生图像,请参阅更新后的 Spring Boot 参考文档

Log4j2 增强功能

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

  • 配置文件特定的配置
  • 环境属性查找
  • Log4j2 系统属性

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

改进的@ConstructorBinding 检测

使用构造函数绑定时,如果类具有单个参数化构造函数,则不再需要注释@ConfigurationProperties@ConstructorBinding如果您有多个构造函数,您仍然需要使用@ConstructorBinding来告诉 Spring Boot 使用哪一个。

对于大多数用户来说,这个更新后的逻辑将允许使用更简单的@ConfigurationProperties类。但是,如果您有一个@ConfigurationProperties并且想要将 bean 注入构造函数而不是绑定它,那么您现在需要添加一个@Autowired注释

Micrometer Updates

Micrometer Observation API 的自动配置

Spring Boot 3.0 支持 Micrometer 1.10 中引入的新观察 API。新ObservationRegistry接口可用于创建观察,它为指标和跟踪提供单一 API。ObservationRegistrySpring Boot 现在为您自动配置一个实例。

如果micrometer-core在类路径上,aDefaultMeterObservationHandler注册在 上ObservationRegistry,这意味着每次停止都会Observation导致一个计时器。 ObservationPredicate,GlobalObservationConventionObservationHandler自动注册在ObservationRegistry. 如果需要,您可以使用ObservationRegistryCustomizer它来进一步自定义。ObservationRegistry

有关详细信息,请参阅参考文档的新“可观察性”部分。

监控跟踪的自动配置

Spring Boot 现在为您自动配置Micrometer Tracing 。这包括对 Brave、OpenTelemetry、Zipkin 和 Wavefront 的支持。

使用 Micrometer Observation API 时,完成观察将导致报告给 Zipkin 或 Wavefront 的跨度。可以使用 下的属性控制跟踪management.tracing。Zipkin 可以配置为management.zipkin.tracing,而 Wavefront 使用management.wavefront.

更多详细信息,包括您需要添加的各种依赖项,请参见参考文档的跟踪部分。

Micrometer 的 OtlpMeterRegistry 的自动配置

An现在在类路径上OtlpMeterRegistry时自动配置。io.micrometer:micrometer-registry-otlp仪表注册表可以使用management.otlp.metrics.export.*属性进行配置。

普罗米修斯支持

Prometheus 示例的自动配置

当有一个 Micrometer Tracing Tracerbean 并且 Prometheus 在类路径上时,aSpanContextSupplier现在是自动配置的。该供应商通过使当前跟踪 ID 和跨度 ID 可用于 Prometheus 将指标链接到跟踪。

在关闭时对 Prometheus Push Gateway 进行 PUT

Push Gateway 可以配置为在关闭时执行PUT。为此,请设置management.prometheus.metrics.export.pushgateway.shutdown-operationput。此外,现有push设置已被弃用,post现在应该改用。

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

使用 Apache Kafka 启用异步确认

spring.kafka.listener.async-acks添加了一个新的配置属性,用于启用与 Kafka 的异步确认。要启用异步确认,请将属性设置为true. 该属性仅在spring.kafka.listener.async-mode设置为manual或时适用manual-immediate

弹性搜索 Java 客户端

引入了新的 Elasticsearch Java 客户端的自动配置。它可以使用现有的spring.elasticsearch.*配置属性进行配置。

JdkClientHttpConnector 的自动配置

在没有 Reactor Netty 的情况下,Jetty 的反应式客户端和 Apache HTTP 客户端JdkClientHttpConnector现在将自动配置。这允许WebClient与 JDK 的HttpClient.

@SpringBootTest 与主要方法

如果可用,注释@SpringBootTest现在可以使用main任何已发现的类。@SpringBootConfiguration这意味着SpringApplication您的 main 方法执行的任何自定义配置现在都可以通过测试获取。

要将该main方法用于测试,请将useMainMethod属性设置@SpringBootTestUseMainMethod.ALWAYSUseMainMethod.WHEN_AVAILABLE

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

Spring Reactive Web开发参考

Getting Started | Building a Reactive RESTful Web Service

Spring6.0提供HTTP Interfaces新特性,类似于SpringData的Repository或者SpringCloud OpenFeign一样,从而更高效的实现WebFlux开发。

Spring6.0 HTTP Interfaces官方地址。

Redirecting...

其他改动

除了上面列出的更改外,还有一些小的调整和改进,包括:

  • 在应用程序启动期间不再记录主机名。这可以防止有助于缩短启动时间的网络查找。
  • SecurityManager在 JDK 中弃用 Java 后,已删除对它的支持。
  • 在 Spring Framework 6 中移除后,对 Spring Framework 的支持CommonsMultipartResolver`被移除。(原上传方法)
  • spring.mvc.ignore-default-model-on-redirect弃用以与上游 Spring Framework 更改保持一致。
  • 可以使用spring.mvc.webjars-path-pattern或自定义 WebJars 资源处理程序路径模式spring.webflux.webjars-path-pattern
  • Tomcat 远程 IP 阀的可信代理可以使用server.tomcat.remoteip.trusted-proxies.
  • Configuration现在可以通过定义一个bean 来自定义Bean 验证ValidationConfigurationCustomizer
  • Log4j2Log4jBridgeHandler现在用于将基于 JUL 的日志记录路由到 Log4j2,而不是通过 SLF4J 进行路由。
  • 实现该接口的 BeanMeterBinder现在仅在初始化所有单例 bean 后才绑定到仪表注册表。
  • SpanCustomizerBrave 和 OpenTelemetry 的 beans 现在是自动配置的。
  • Micrometer and Metrics JvmCompilationMetrics现在是自动配置的。
  • DiskSpaceHealthIndicator现在在其日志消息及其运行状况详细信息中包含其路径。
  • ADataSourceBuilder现在可以从包装的DataSource.
  • 现在可以使用该属性为 MongoDB 配置多个主机spring.data.mongodb.additional-hosts
  • Elasticsearch 的 socketKeepAlive 属性可以使用该spring.elasticsearch.socket-keep-alive属性进行配置。
  • 使用时spring-rabbit-stream,aRabbitStreamTemplateEnvironment现在将自动配置是否spring.rabbitmq.listener.typestream
  • 可以使用 修改现有的 Kafka 主题spring.kafka.admin.modify-topic-configs
  • WebDriverScopeWebDriverTestExecutionListener已公开以简化在自定义测试设置中的使用WebDriver

Spring Boot 3.0 中的弃用

  • @ConstructorBinding已从org.springframework.boot.context.properties包中移至org.springframework.boot.context.properties.bind.
  • JsonMixinModule基于扫描的构造函数已被弃用。
  • ClientHttpRequestFactorySupplier应替换为ClientHttpRequestFactories.
  • comment不再支持Cookie属性。
  • RestTemplateExchangeTagsProviderWebClientExchangeTagsProviderWebFluxTagsProviderWebMvcTagsProvider相关类已替换为ObservationConvention等效类。
  • 基类上的无参数构造函数HealthContributor @Configuration已被弃用。
  • DefaultTestExecutionListenersPostProcessor并且SpringBootDependencyInjectionTestExecutionListener已被弃用,取而代之的是 Spring Framework 的ApplicationContextFailureProcessor.
  • 属性management.metrics.export.<product>已弃用,替换为management.<product>.metrics.export.
  • 有利于push的设定。management.prometheus.metrics.export.pushgateway.shutdown-operation``post
  • @AutoConfigureMetrics已被弃用,取而代之的是@AutoConfigureObservability.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dr_eamboat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值