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.propertiesapplication.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.propertiesapplication.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