Springboot 启动命令中添加 --spring.config.location不生效
一。背景项目(微服务)中,几个服务需要打包成公共服务包(基础服务包,其他项目也可以直接应用该服务),并且生成docker 镜像。这就需要在项目启动时动态加载配置,而不应该写固定在 classpath 中的application.yml 配置文件中。这时,可以通过在与jar包同级的目录下创建 config/appliation.yml 或者 直接创建 application.yml 文件来覆盖内部的
一。背景
项目(微服务)中,几个服务需要打包成公共服务包(基础服务包,其他项目也可以直接应用该服务),并且生成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 优先级低,很容易被忽略。
更多推荐
所有评论(0)