应用jar里的配置文件比较多,但是又不规范
比如,我面对的一个jar文件要从单体部署到高可用中,所以我需要用命令来替换一些配置,本以为是比较简单的步骤,但是却踩了很多坑.
比较明显的就是使用--spring.profiles.active=distributed,如果这样启动jar,配置文件xxx-docker会生效,但是jar中的application.properties就会失效,这并不是我想要的效果,我只是想替换bootstrap-xx.yml这个配置文件
jar里的配置文件是这样的:
[root@localhost SecDesk]# ls -alhr testjar/BOOT-INF/classes/
total 88K
drwxr-xr-x. 7 root root 78 Sep 6 17:36 WEB-INF
drwxr-xr-x. 3 root root 28 Sep 6 17:36 RuleRepository
drwxr-xr-x. 4 root root 47 Sep 6 17:36 pe
-rw-r--r--. 1 root root 9.2K Sep 6 17:36 filebeat-config.yml
-rw-r--r--. 1 root root 847 Sep 6 17:36 ehcache.xml
drwxr-xr-x. 2 root root 4.0K Sep 6 17:36 config
drwxr-xr-x. 3 root root 21 Sep 6 17:36 com
drwxr-xr-x. 15 root root 227 Sep 6 17:36 client
-rw-r--r--. 1 root root 41 Sep 6 17:36 bootstrap.yml.bak
-rw-r--r--. 1 root root 40 Sep 6 17:36 bootstrap.yml
drwxr-xr-x. 2 root root 4.0K Sep 6 17:36 bootstrap-undertow
-rw-r--r--. 1 root root 5.5K Sep 6 17:36 bootstrap-docker.yml.bak
-rw-r--r--. 1 root root 5.5K Sep 6 17:36 bootstrap-docker.yml
-rw-r--r--. 1 root root 5.1K Sep 6 17:36 bootstrap-dev.yml
-rw-r--r--. 1 root root 7.3K Sep 6 17:36 bootstrap-dev-dd.yml
-rw-r--r--. 1 root root 5.9K Sep 6 17:36 bootstrap-combine.yml
-rw-r--r--. 1 root root 458 Sep 6 17:36 banner.txt.bak
-rw-r--r--. 1 root root 59 Sep 6 17:36 banner.txt
drwxr-xr-x. 3 root root 17 Sep 6 17:36 arrange
-rw-r--r--. 1 root root 3.2K Sep 6 17:37 application.properties
drwxr-xr-x. 4 root root 71 Sep 6 17:37 ..
drwxr-xr-x. 10 root root 4.0K Sep 6 17:37 .
如果我在docker-compose文件中这么搞的话,就会有问题,application.properties就会失效,因为jar里面的application.properties有比较重要的配置,我这么做之后报错了,所以才发现这个问题
server-client:
entrypoint: [ "java", "-jar", "/server-client.jar","--spring.config.location=/config/bootstrap-distributed.yml" ,"--spring.profiles.active=distributed"]
volumes:
- ./server-client/bootstrap-distributed.yml:/config/bootstrap-distributed.yml
depends_on:
- consul
解决的办法
使用--spring.config.additional-location指定一个配置文件夹,这样的话不影响jar里的配置文件,然后把jar里面的bootstrap.yml复制出来放到/config/文件夹里
然后修改bootstrap.yml的内容,把bootstrap也挂载到容器中去,这样jar里原来的配置文件就能按原来的顺序加载了,就能达到目的了
本来我打算如果这样还不好使的话,就把jar里面的配置文件都考出来,放到config目录去,然后直接挂载目录
entrypoint: [ "java", "-jar", "/server-client.jar","--spring.config.additional-location=/config/" ]
bootstrap.yml的内容.
spring:
profiles:
active: docker # 改成 distributed
修改后的compose配置
server-client:
entrypoint: [ "java", "-jar", "/server-client.jar","--spring.config.additional-location=/config/" ]
volumes:
- ./server-client/bootstrap-distributed.yml:/config/bootstrap-distributed.yml
- ./server-client/bootstrap.yml:/config/bootstrap.yml
depends_on:
- consul
container_name: server-client
image: server-client
restart: always
networks:
- sec-net
ports:
- 32084:32084
- 8228:8228
environment:
....
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。