我们在部署springboot项目的时候,经常会遇到这样的情况:测试环境与生产环境的配置不一样,这就导致每次部署的时候都要修改配置文件再打包,即使用了nacos进行配置管理,但测试环境与生产环境的nacos部署的地方肯定不一样,所以每次部署的时候还是需要修改配置文件里的nacos地址,这样比较麻烦,有时候还可能会忘记修改。
经过查资料了解到其实springboot可以读取外部配置文件,即在springboot应用启动后,不直接使用jar包里面的配置文件,而是读取某个目录下的配置文件,然后进行覆盖,从而实现应用与配置分离,这样就不用每次部署都修改配置文件了。
下面是官方文档里的描述:
springboot官方文档地址
从官方文档里的描述可以知道:SpringApplication读取配置文件的方式有四种,并且是有优先级的,所有方式下的配置文件都会被读取,高优先级的内容会覆盖低优先级的内容
四种读取方式如下:
1、在jar包的同一目录下建一个config文件夹,然后把配置文件放到这个文件夹里
2、直接把配置文件放到jar包的同级目录
3、在classpath下建一个config文件夹,然后把配置文件放进去
4、在classpath下直接放配置文件
项目被打成jar包后,配置文件会被放在BOOT-INF的classes目录下:
这就是上面所说的第四种读取方式,也是优先级最低的读取方式
综上所述,我们可以使用第一、二种配置文件读取方式来实现应用与配置分离,我这里是用的第二种方式,将配置文件放到了jar包的同级目录:
这样当项目启动的时候,它就会去读取这个配置文件,并且覆盖掉jar包里的配置文件
如果想把配置文件放在任意目录,那就需要在jar包的启动命令里指定配置文件的路径,参数如下:
spring.config.location=xxx
完整配置示例如下:
nohup java -jar nms-alarm-manager.jar --spring.config.location=/home/my-config/bootstrap.yml &