带你升级SpringBoot版本

152 阅读2分钟

1.前言

当你需要使用框架的某一个新功能时,往往需要面临着版本升级,版本升级无形之中会给业务系统带来一定的故障。秉着"稳定运行"的原则,系统维护者一般都不太愿意去进行版本升级,除非迫不得已......

我很庆幸地迎来了一次"迫不得已"的版本升级机会,需要将SpringBoot版本从1.5.x升级到2.x版本,整个过程基本都是更换包路径,还算是比较顺利,然后......

如果这么顺利,你的内心应该是忐忑的,俗话说的好:"不怕出问题,就怕不出问题",果不其然本地正常启动,到了测试环境却无法正常启动,很多@Value注解对应的占位符属性都无法解析。

2.系统背景介绍

2.1 升级前

业务系统中存在某些默认配置,这些配置是存放在配置文件中,也就是系统中除了默认的application.yml文件外,还存在着很多其它的yml文件

默认情况下只会读取名称为application的配置文件

对于这种情况就需要在SpringBoot启动的过程中手动设置spring.config.name对应的值

public static void main(String[] args) {
    ConfigurableEnvironment environment = new SpringApplicationBuilder(PropertiesApplication.class)
        .properties("spring.config.name=test,application")
        .run(args)
        .getEnvironment();
    log.info("config path:" + environment.getProperty("config.path"));
    log.info("spring application name:" + environment.getProperty("spring.application.name"));
}

测试环境应用的启动方式:java -jar application.jar --spring.config.location=配置文件的路径

可以看到应用启动通过spring.config.location参数指定了配置文件的路径,再来看下官方文档对spring.config.location的解读:

默认情况下,配置文件的路径为classpath:/,classpath:/config/,file:./,file:./config/,配置读取顺序为file:./config/,file:./,classpath:/config/,classpath:/,如果自定义配置文件路径,配置文件读取顺序为自定义文件路径,file:./config/,file:./,classpath:/config/,classpath:/

2.2升级后

将SpringBoot升级到2.x版本后,以同样的方式java -jar application.jar --spring.config.location=配置文件的路径启动程序,发现应用启动报错,无法解析@Value注解对应的占位符属性。

解铃还须系铃人,既然错误是升级SpringBoot版本带来的,那么官方文档就会给出相关说明:

spring.config.location 属性从字面上很容易看出来是重新定义了配置文件的路径,不包含默认的路径;spring.config.additional-location属性从字面上很容易看出来是指定了额外的配置文件路径,包含默认的路径。

3.解决方案

经过以上分析很容易得出解决方案就是使用spring.config.additional-location属性来代替spring.config.location属性,应用启动方式修改为:java -jar application.jar --spring.config.additional-location=配置文件的路径