背景:部署多个服务,但是每个里面有很多相同的配置,这些配置每次部署都需要更改
目标:希望配置文件里面的运维相关的配置抽取到公共目录,实现统一管理,一改全改
技术:spring.profiles.include(详细说明点击)
初级方法(方法一):
将公共配置抽取出来
本方法关键字:抽取
比如application.yml里面有配置。其中公共配置如下
spring:
data:
mongodb:
host: 192.168.1.2
port: 27017
database: mydb
redis:
host: 192.168.1.3
其他配置....
抽取之后 application.yml 变成
spring:
profiles:
include:
mongodb,redis
其他配置....
抽取mongodb的部分放到文件 application-mongodb.yml
spring:
data:
mongodb:
host: 192.168.1.2
port: 27017
database: mydb
抽取redis的部分放到文件 application-redis.yml
spring:
data:
redis:
host: 192.168.1.3
完成之后文件目录结构变化
优点:如果mongodb和redis配置有变更,只需要修改一份配置,然后同步到所有服务即可
缺点:1)需要做同步操作(复制,替换); 2)客观上,配置文件还是存在多份
高级方法(方法二):
方法一虽然能解决配置变更之后的快速修改,在操作上需要同步替换操作才行,容易遗漏,也不能统一管理
在此基础上,我们希望能有所改善
将所有公共配置存放到一个公共的目录,然后到所有用到公共配置文件的目录下创建文件链接。
例如原本的目录结构是
1)将mongodb和redis移动到…/config
2)在testapp1和testapp2 分别建立链接
ln -s ../config/application-mongodb.yml application-mongodb.yml
ln -s ../config/application-redis.yml application-redis.yml
完成之后文件目录结构如下
如果是Windows环境,可以这样创建链接
mklink /h application-mongodb.yml F:\application-mongodb.yml
优点:如果配置有变更,只需要修改一份配置,所有建立链接的服务都能读取到
缺点:第一次部署的时候需要额外做创建链接的工作(但是能一劳永逸)