背景:部署多个服务,但是每个里面有很多相同的配置,这些配置每次部署都需要更改
目标:希望配置文件里面的运维相关的配置抽取到公共目录,实现统一管理,一改全改
技术: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

完成之后文件目录结构变化

springboot 公共方法 springboot公共模块抽取_部署


优点:如果mongodb和redis配置有变更,只需要修改一份配置,然后同步到所有服务即可

缺点:1)需要做同步操作(复制,替换); 2)客观上,配置文件还是存在多份


高级方法(方法二):

方法一虽然能解决配置变更之后的快速修改,在操作上需要同步替换操作才行,容易遗漏,也不能统一管理
在此基础上,我们希望能有所改善

将所有公共配置存放到一个公共的目录,然后到所有用到公共配置文件的目录下创建文件链接。

例如原本的目录结构是

springboot 公共方法 springboot公共模块抽取_spring.profiles_02


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

springboot 公共方法 springboot公共模块抽取_Spring Boot配置_03


完成之后文件目录结构如下

springboot 公共方法 springboot公共模块抽取_mongodb_04


如果是Windows环境,可以这样创建链接

mklink /h application-mongodb.yml F:\application-mongodb.yml

springboot 公共方法 springboot公共模块抽取_spring.profiles_05


优点:如果配置有变更,只需要修改一份配置,所有建立链接的服务都能读取到

缺点:第一次部署的时候需要额外做创建链接的工作(但是能一劳永逸)