这可能是最全的SpringBoot3新版本变化了!
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。
Micrometer Tracing 自动装配
SpringBoot 现在自动装配Micrometer Tracing ,包括对 Brave, OpenTelemetry, Zipkin 和 Wavefron 的支持。
另外,当引入io.micrometer:micrometer-registry-otlp包之后, OtlpMeterRegistry也会自动装配。
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.JdbcAggregateTemplateorg.springframework.data.jdbc.core.convert.DataAccessStrategyorg.springframework.data.jdbc.core.convert.JdbcConverterorg.springframework.data.jdbc.core.convert.JdbcCustomConversionsorg.springframework.data.jdbc.core.mapping.JdbcMappingContextorg.springframework.data.relational.RelationalManagedTypesorg.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 的
SpanCustomizerbean 现在会自动装配 - 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,如有错误,请指出,谢谢。
这可能是最全的SpringBoot3新版本变化了!的更多相关文章
- PHP新版本变化
世界变化真快,突然听闻 PHP 都到 7.3 版本了,7.2 还没仔细了解过呢.看到我司面试时会问到php新版本有什么特性,美名其曰考察其学习新技术的能力,我有点汗颜,自己都没有主动去了解过,实在不应 ...
- 原生JS实现全选和不全选
案例演示 源代码 <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...
- 第八十二篇:Vue购物车(三) 实现全选功能
好家伙, 继续完善购物车相应功能 1.如何实现全选和反全选 1.1.全选框的状态显示(父传子) 来一波合理分析: 在页面中,有三个商品中 三个商品中的第二个未选择, 我么使用一个计算属性(fullSt ...
- SlickOne -- 基于Dapper, Mvc和WebAPI 的快速开发框架
前言:在两年前,项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实践和应用,今再次对SlickOne项目做以回顾和总结.其目的是精简,持续改进,保持重 ...
- 兼容发布&小流量概述
背景 re消息limit上线之前有这样的问题: 1.存量用户,会感知到新功能: 2.后端.前端上线间隔期间,如果没做兼容,涉及到接口数据格式变更,会导致C端拉取数据报错: 3.改模板配置,会导致老信息 ...
- SlickOne敏捷开发框架介绍(一) -- 基于Dapper, Mvc和WebAPI 的快速开发框架
前言:在两年前(最初发布时间:2013年1月9日(csdn),当前文章时间2015年11月10日),项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实 ...
- 学习Geodatabase的总结
一.怎样择取自己需要的.有用的资料 1.开始找资料时,首先想到的是ESRI的帮助文档,因为它直接.规范而系统.通读一遍之后,大致了解了Geodatabase的各个方面.再从帮助文档体系结构中选出重要的 ...
- Java开源诊断工具 Arthas 发布v3.1.0
Arthas 自2018年9月份上线以来「传送门」,已收获近万个star,感谢开发者们的认可.此次Arthas 3.1.0版本的发布,不仅带来大家投票出来的新LOGO,还带来强大的新功能和更好的易用性 ...
- 手把手教你使用 Nginx Ingress 实现金丝雀发布
概述 本文将介绍如何使用 Nginx Ingress 实现金丝雀发布,从使用场景分析,到用法详解,再到上手实践. 前提条件 集群中需要部署 Nginx Ingress 作为 Ingress Contr ...
- IntelliJ IDEA 2020.3正式发布,年度最后一个版本很讲武德
仰不愧天,俯不愧人,内不愧心.关注公众号[BAT的乌托邦],有Spring技术栈.MyBatis.JVM.中间件等小而美的原创专栏供以免费学习.分享.成长,拒绝浅尝辄止.本文已被 https://ww ...
随机推荐
- 一文读懂,硬核 Apache DolphinScheduler3.0 源码解析
点亮 ️ Star · 照亮开源之路 https://github.com/apache/dolphinscheduler 本文目录 1 DolphinScheduler的设计与策略 1.1 分布 ...
- Python Web开发主流框架
Web 开发是Python 语言应用领域的重要部分,也是工作岗位最多的领域.如果你对基于Python的Web 开发有兴趣,正打算使用Python 做Web 开发,或者已经是一个Web 开发者有工作需要 ...
- C语言大作业---学生信息管理系统
xxxx信息管理系统 简介 因为大作业规定的踩分项就那么多,为了不浪费时间 + 得分,就写成这样.现在看看,命名不规范,书写风格糟糕,全塞在一个源代码中······ 不过,应付大作业是没问题的 实验报 ...
- 启动elasticsearch报错解决
说不定以后会不定期更新该文档 1.提示文件描述符数量太少,修改/etc/security/limits.conf文件,添加. * soft nofile 65537 * hard nofile 655 ...
- docker的cmd命令详解-前后台理解
CMD 指令的格式和 RUN 相似,也是两种格式: shell 格式:CMD <命令> exec 格式:CMD ["可执行文件", "参数1", & ...
- ubuntu开启sshd
SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudo apt-g ...
- 国产电脑可较为流畅运行的Windows系统
系统是Windows2003,内置了WPS和IE8,使用QEMU TCG运行,速度慢,凑合能用. 使用前先sudo apt install qemu-system-x86,把压缩包中的2003.qco ...
- 【Wine使用经验分享】Wine字体显示问题处理
字体不显示/字体为□ 首先尝试下载simsun字体到/usr/share/fonts (simsun.ttf simsun.ttc) 在新版本wine上,差不多就能解决问题. 如果还不行,就从网上下载 ...
- 一个 dubbo 和 springboot 的兼容性问题
背景介绍 最近把dubbo的版本从2.7.3升级到2.7.15时,遇到一个报错 No application config found or it's not a valid config! ,对应的 ...
- C++ 右值引用与一级指针
将右值引用用于一级指针,在初始化时等号右边必须为右值,有以下几种用法: //方式一:引用一级指针,常规用法 int a = 5; int * &&rrpa = &a; //右值 ...