使用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 文件的公共信息, 所有的指定環境的都會生效;