Springboot 启动命令中添加 --spring.config.location不生效

一。背景

        项目(微服务)中,几个服务需要打包成公共服务包(基础服务包,其他项目也可以直接应用该服务),并且生成docker 镜像。这就需要在项目启动时动态加载配置,而不应该写固定在 classpath 中的application.yml 配置文件中。

        这时,可以通过在与jar包同级的目录下创建 config/appliation.yml 或者 直接创建 application.yml 文件来覆盖内部的配置。但是要打成 docker 镜像,这里就不能使用这种方法了,否则每次更改配置都要重新打镜像。

        ·这里使用了 在启动时  添加 --spring.config.location 配置,指定 配置文件或者配置文件目录,然后再通过 -v 来做容器文件映射。这样就可以在容器启动时动态指定配置。达到公共服务的目的。

二。问题

工程目录如下:

本地发布目录如下 :

 启动命令:

java -jar docker-test-1.0-SNAPSHOT.jar --spring.config.location=./lala/

基本思路确定了,但是实际应用的过程发生了问题,--spring.config.location 配置不生效。项目启动时,不报错,但是 --spring.config.location 中配置的内容也不生效。

三。解决方案

各种尝试之后,发现,启动类中没有添加启动参数,如下:

 如果不添加启动参数,那么所有启动命令中添加的参数设置都将不生效。。。

正确的启动方式:

 强烈建议,springboot 启动类中添加该启动参数。

四。注意事项

1.使用这种方式,一定要保证 Springboot 项目的 启动类可以接收外部参数,如下:

 

否则,所有命令行中添加的参数都不会生效。

2.--spring.config.location= 可以设置为文件 , 也可以设置为目录。当有多个配置文件时,可以配置为目录,当配置为目录时,一定要注意,目录后需要添加 /

如:

 

3.springboot 2.x版本中,对 --spring.config.location 的语义做了改变,如果启动命令中添加了该配置,则不再读取 classpath 中的配置文件。

4.spring.config.location 设置 在 classpath 中的 appliation.yml 不生效,因为 application.yml 优先级低,很容易被忽略。

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值