這裏引入 spring-cloud-config-server 便可,spring-boot-starter-security 只是爲了給配置中心加一個訪問驗證,能夠忽略該引用:git
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Camden.SR3</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
研發項目時,公司確定會有幾套環境,生產、測試、開發、本地等,因此咱們的配置文件也應該是分別對應的,下圖中是一個示例:config-file 是遠程的git倉庫,test 是項目下的一級文件夾,test下有兩個文件夾分別存放 prd 和 dev 環境的配置文件,application.properties 是公用配置文件,config-test.properties中的 config-test 是其中一個微服務的名稱,這樣微服務公共的配置放到 application.properties,微服務個性化的配置在各自的配置文件中。注意:微服務的個性化配置會覆蓋 application.properties 中的相同配置。spring
下面的配置默認加載遠程倉庫 test/dev 下的配置,若是密碼中含有特殊字符,能夠加轉義符「\」,或者直接用單引號 「 ‘ 」 將密碼引發來,這裏用戶名默認爲user,密碼:12345bootstrap
spring: cloud: config: server: git: uri: https://code.aliyun.com/995586041/config-file.git searchPaths: test/dev username: 995586041@qq.com password: ',******' repos: prd: pattern: "*/prd*" uri: https://code.aliyun.com/995586041/config-file.git searchPaths: test/prd username: 995586041@qq.com password: \,****** dev: pattern: "*/dev*" uri: https://code.aliyun.com/995586041/config-file.git searchPaths: test/dev username: 995586041@qq.com password: ',******' server: port: 8888 security: user: password: ${CONFIG_SERVICE_PASSWORD:12345}
加上 @EnableConfigServer 註解便可bash
@SpringBootApplication @EnableConfigServer public class ConfigApplication { public static void main(String[] args) { SpringApplication.run(ConfigApplication.class, args); } }
http://localhost:8888/test/application,若是上面設置了訪問密碼,會提示輸入用戶名和密碼,填入相關信息進行驗證,而後能夠看到相關配置信息:app
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> </dependencies>
這裏配置文件使用 bootstrap.properties,項目啓動時會先加載 bootstrap.properties 而後再加載 application.properties,這裏咱們指定 prd ,這樣咱們就能夠指定了配置文件,注意這裏的微服務名稱爲:config-test ,下邊會用到ide
server.port = 8082 spring.profiles.active = prd spring.application.name = config-test spring.cloud.config.uri = http://127.0.0.1:8888 spring.cloud.config.fail-fast = true spring.cloud.config.username = user spring.cloud.config.password = 12345 spring.cloud.config.profile=prd goldleaf.test01 = test01 ${spring.profiles.active} bootstrap.properties goldleaf.test05 = test05 ${spring.profiles.active} bootstrap.properties goldleaf.test06 = test06 ${spring.profiles.active} bootstrap.properties
能夠看到,咱們這裏並無加有關配置中心的特殊註解,我只是寫了一個測試接口spring-boot
@SpringBootApplication @RestController public class UserApplication { @Value("${goldleaf.test01}") private String test01; @Value("${goldleaf.test02}") private String test02; @Value("${goldleaf.test03}") private String test03; @Value("${goldleaf.test05}") private String test05; @Value("${goldleaf.test06}") private String test06; public static void main(String[] args) { SpringApplication.run(UserApplication.class, args); } @GetMapping("/test") public String getConfig() { StringBuilder builder = new StringBuilder(); builder.append("test01:" + test01 + "\r\n"); builder.append("test02:" + test02 + "\r\n"); builder.append("test03:" + test03 + "\r\n"); builder.append("test05:" + test05 + "\r\n"); builder.append("test06:" + test06 + "\r\n"); return builder.toString(); } }
如今咱們有了三個配置文件:項目裏的 bootstrap.properties、遠程的 application.properties 和遠程的 config-test.properties。配置說明:1). 在上面三個文件中分別定義了 test0一、test0二、test03,用來講明三個配置文件中的配置都是起做用的;2). 在上面三個文件中同時定義了test05,用來講明三個文件的優先級;3). 在 bootstrap.properties 和 application.properties 中同時定義了 test06 ,用來肯定兩者的優先級。啓動項目以後,如今咱們經過訪問 config-test 的test接口查看一下結果:微服務
test01-03,說明三個文件中的配置都有加載;test05 說明微服務的個性化配置會覆蓋前面的配置,優先級最高;test06 說明默認狀況下遠程倉庫的 application.properties 優先級高於 bootstrap.properties測試
優先級順序:遠程config-test > 遠程application.properties > 本地bootstrap.propertiesui
在遠程倉庫的git倉庫中添加下列配置:
# 容許本地配置覆蓋遠程配置 spring.cloud.config.allowOverride=true spring.cloud.config.overrideNone=true spring.cloud.config.overrideSystemProperties=false
而後訪問測試接口:http://127.0.0.1:8082/test,test0五、test06加載的是本地bootstrap.properties中的配置信息:
開發的時候,不免會更改某些配置,若是每次更改配置都進行服務的從新發布,有點讓人頭大,因此咱們在更改配置文件以後,手動刷新一下配置。
在非config端的pom文件中增長 spring-boot-starter-actuator 依賴:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
修改git倉庫的配置文件以後,POST方式調用服務的 /refresh 端點,如:http://127.0.0.1:8082/refresh 這裏會返回有哪些配置點被修改:
查看結果:
5 項目代碼
core-simple 項目:https://code.aliyun.com/995586041/core-simple.git
config-server:https://code.aliyun.com/995586041/config.git
config-client:https://code.aliyun.com/995586041/config-client.git
config-file:https://code.aliyun.com/995586041/config-file.git