使用config配置中心
1. 使用本地配置
需要声明, spring.profiles.active=native, 这种就是使用本地配置;
缺点:
不能实时刷新配置文件, 使用actuator 的 /refresh 接口来刷新, 是重新从config配置中心中获得, 刷新的是客户端的配置文件;
config配合中心的配置文件如果修改了, 需要重启才能刷新, 每次修改完配置文件都需要重启config配置中心才行;*
详细配置信息如下:
spring:
profiles:
active: native # 启动本地配置文件, set Git URI in your configuration
cloud:
config:
server:
native:
search-locations: classpath:/test01
2. 使用git仓库, 用户名密码配置;
使用git的用户名和密码, 登录来拉取仓库信息, 主要是uri, basedir, username, 和 password 四个必填的属性值, uri可以使用ssh的链接;
注意: 如果缺少, 拉取的本地路径basedir会等不到配置文件;
详细配置信息如下:
spring:
cloud:
config:
server:
git:
uri: https://github.com/username/config
basedir: E:\git\config
username: username
password: password
search-paths: test01,test02
3. 使用git仓库, 私钥配置:
使用用户名密码配置的方式, 将密码写在配置文件中总是不太好, 也可以使用私钥的配置方式;
1. 创建一个私钥,
2. 配置config配置中心;
spring:
cloud:
config:
server:
git:
uri: [email protected]:credit/config.git
basedir: E:\git\config
passphrase: ****** # 私钥的口令, 没有可以不配置
注意:
- 没有username, 和 password属性, 如果username没有去掉, 会默认走用户名密码的方式, 导致, password属性没有找到, 报错访问不到;
- 私钥读取的是默认位置 ~/.ssh/id_ras, 如果有多个私钥自行配置 ~/.ssh/config 文件
- 私钥的产生方式 使用命令
ssh-keygen -m PEM -t rsa -b 4096
这几个参数是必须的;
4. 使用私钥配置在文件中
还有一种是将私钥写在配置文件中, 不读取本地的私钥
注意使用换行符保持格式相同
spring.cloud.config.server.git.ignore-local-ssh-settings=true
spring.cloud.config.server.git.private-key="\
-----BEGIN RSA PRIVATE KEY-----\n
b3BlbnNzaC1rZXktdjEAAAAAtskoQN1tcvvYAovZ9/eZLq2+Ix
.......
qsY+JZs6Frc\n
dV5LJLLlyM9eb9omlwAAAApsaXpoZW5
naHVpAQIDBAUGBw==\n
-----END RSA PRIVATE KEY-----"
官方提供的是yml文件的书写格式, 尝试使用但是报错, 私钥格式不正确, 没有找到原因
产生这个的原因是: 生成私钥的方式不对,
一般使用ssh-keygen
生成的私钥开头都是
-----BEGIN OPENSSH PRIVATE KEY-----
b2MnBmKZ....wCJpSr95c
-----END OPENSSH PRIVATE KEY-----
但是spring官方提供的私钥方式是RSA如下格式
-----BEGIN RSA PRIVATE KEY-----
b2MnBmKZ....wCJpSr95c
-----END RSA PRIVATE KEY-----
所以会提示格式不正确, 使用下面命令解决私钥可以解决问题
ssh-keygen -m PEM -t rsa -b 4096 -f ./test02
-m 参数指定密钥的格式,PEM(也就是RSA格式)是之前使用的旧格式
-b:指定密钥长度;
-e:读取openssh的私钥或者公钥文件;
-C:添加注释;
-f:指定用来保存密钥的文件名;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要创建的密钥类型
补充:
spring.cloud.config.server.svn.search-paths=test01,test02
- 当项目过多的时候, 将配置文件拆分的子目录中, 就需要用到该参数,
如果不配置, 默认扫描根目录下的配置文件; - 使用application为文件名称的配置文件, 里面是公共的配置信息不管是在哪个子目录下都会扫描到, 都会公共使用;
- application-{profiles}.yml(properties) 这个文件中会对所有的*-{profiles}.yml 文件的公共信息, 所有的指定环境的都会生效;