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-app
server:
port: 8081
---
spring:
profiles:
active: prod
application:
name: prod-app
server:
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