2018年2月28日Spring Boot进入2.0时代,距今曾经超过4年了。 2022 年 11 月 Spring Boot 3.0 将正式公布,它将基于 Spring Framework 6.0,并且须要 Java 17 或更高版本,同时它也将是Jakarta EE 9的第一个 Spring Boot 版本。还有六个月的工夫留给开发者来过渡到 Spring Boot 3.0,明天胖哥将通知你一些办法,以便于未来疾速迁徙到3.0。
Java 17
Java 17 将是继 Java 8 以来最重要的LTS版本,是 Java 社区八年致力的成绩。蕴含了很多重要的改良,Java 17也是目前性能最强的LTS版本。目前所有的 Spring Boot 2.x 版本都能很好地适配 Java 17,你能够无需期待,先着手JDK的降级调试,并尝试一些新的个性和API。
尽快降级到Spring Boot 2.7
前几日胖哥曾经讲了Spring Boot 2.7根本曾经是Spring Boot 2.x最初一个大版本了,Spring Boot 2.5曾经进行OSS反对,不再进行保护,Spring Boot 2.6也将在Spring Boot 3.0公布后进行保护,迭代的速度越来越快了。尽早降级到2.7能力更好迁徙到3.0,这里胖哥倡议不要跳版本升级,比方不要间接从2.4跳到2.7,尽量依照2.4、2.5、2.6、2.7这样的步骤降级,跨度太大反而不利于平滑降级。
移除过期代码
每个Spring Boot版本都会或多或少有一些被标记为@Deprecated
的代码,Spring Boot 3.0 将齐全移除在 2.x 过期的代码,当然2.x晚期的过期代码也可能在最新的2.x被移除。尽量不要应用过期代码,个别过期代码上都正文有过期的起因或者代替的API。
配置文件机制的更改
在Spring Boot 2.4中,配置文件 application.properties
和 application.yaml
的加载机制被扭转,目标是为了简化内部配置的加载形式,使之更加正当,带来的是不向下兼容。为了平滑降级,Spring 提供了一个配置项来兼容旧机制:
spring: config: use-legacy-processing: true
而这个机制将在3.0时移除,咱们必须应用合乎新机制的配置形式,如果你存在这几种形式就须要留神了。
多文档Yaml
如果你在yaml
配置文件中应用了距离符---
来申明多文档的话,你得晓得当初按文档申明的程序来注册申明的配置属性;而在 Spring Boot 2.3 及更早版本中,基于配置文件激活程序。 举个例子:
---spring: profiles: active: dev application: name: dev-appserver: port: 8081 ---spring: profiles: active: prod application: name: prod-appserver: port: 8080
这个配置文件在Spring Boot 2.3以及更早的版本中会依据spring.profiles.active
来决定加载的环境。然而从2.4开始前面的属性会笼罩后面的属性。
内部配置总是笼罩jar内的配置
如果你的配置文件在jar之外,并且该配置文件实用于特定的环境,例如application-dev.yaml
。2.4以下的版本中,在jar里面的application.yaml
不会笼罩jar中的application-<profile名称>.yaml
文件,从2.4开始内部文件将总是笼罩jar内的配置文件。你须要查看你是否存在这种状况。
激活配置文件
如果您应用spring.profiles
属性来激活环境配置,那么当初就应该迁徙到spring.config.activate.on-profile
。
旧玩法:
spring: profiles: "prod"secret: "production-password"
新玩法:
spring: config: activate: on-profile: "prod"secret: "production-password"
这真是折腾人啊。 spring.profiles.active
依然能够用来激活特定的环境,例如命令行
$ java -jar myapp.jar --spring.profiles.active=prod
你也能够在 application.properties
或 application.yaml
中应用spring.profiles.active
,从2.4开始 spring.profiles.active
不能在特定环境中应用,也就是说application-<profile>.yaml
中不能应用,---
距离的多文档中也不能应用它。一句话,你不能再通过spring.profiles.active
来合并一个蕴含了 spring.config.activate.on-profile
属性的配置文件。
另外 spring.profiles.include
属性,只能在非特定配置文件中应用,上面的配置是有效的:
# 有效配置spring: config: activate: on-profile: "prod" profiles: include: "metrics"
更多的要点请参考官网配置文件Spring boot配置迁徙指南。
性能更高的门路解析形式
从Spring Boot 2.6 开始,门路解析默认应用PathPatternParser
,取代了之前的Ant格调匹配AntPathMatcher
,降级时很多人的Swagger出问题了,通过 spring.mvc.pathmatch.matching-strategy
解决了这个问题。尽管在Spring Boot 3.0中AntPathMatcher
会持续失效,然而PathPatternParser
成为官网举荐,因为它的性能更高,稍后我也将出一篇专题来剖析PathPatternParser
。
兼容问题
首先是Jakarta EE 9的兼容问题,确保你的第三方依赖库和你的代码都兼容Jakarta EE 9。另外也要查看Spring框架正在应用的第三方依赖jar是否有打算兼容Spring 6。
尝试去学习Spring 6
Spring 6以及Spring Boot 3曾经公布了多个里程碑,在空闲工夫能够抽出一些工夫去尝试一下,体验新的个性和变动,评估你利用降级的难度。
关注公众号:Felordcn 获取更多资讯
集体博客:https://felord.cn