隨着程序項目愈來愈多,愈來愈複雜:功能開關、參數配置、第三方服務地址、內部調用、白名單、黑名單等。java
配置修改後實時生效,灰度發佈,分環境、分集羣管理配置、版本控制、回滾機制。git
在這樣的大環境下,傳統的經過配置文件、數據庫等方式已經愈來愈沒法知足開發人員對配置管理的需求。spring
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
spring: application: name: configserver cloud: config: server: git: uri: https://xxx #配置git倉庫地址 username: xxx #用戶名 password: xxx #密碼 server: port: 8081
@SpringBootApplication @EnableConfigServer public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } }
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-client</artifactId> </dependency>
server: port: 8080 spring: application: name: cc profiles: active: api cloud: config: uri: http://localhost:8081 #配置中心 label: cc_dev #版本、分支 profile: api management: security: enabled: false
bootstrap.yml讀取配置中心的cc_dev分支中的cc.yml、cc-api.yml。數據庫
Config Server提供的HTTP接口來獲取數據: bootstrap
curl http://localhost:8081/{application}/{profile}/{label}
master(生產分支):cc.yml、cc-api.yml。。api
cc_dev(開發分支):cc.yml、cc-api.yml。安全
cc_test(測試分支):cc.yml、cc-api.yml。服務器
cc_uat(預生產分支):cc.yml、cc-api.yml。app
Jenkins進行自動化時,對應的git分支和服務器的環境保持一致。curl
環境 | dev(開發) | test(測試) | uat(預生產) | prod(生產) |
git分支 | dev | test | uat | master |
服務器 | dev1_ip dev2_ip dev3_ip |
test1_ip test2_ip test3_ip |
uat_ip | prod_ip |
開發、測試環境對應多套環境,如dev1,dev2,dev3,test1,test2,test3。預生產、生產有且僅有一套環境。
預生產是生產環境的配置的克隆或者小一號環境。通過預生產就能夠合併到生產環境中去了。
注意:
若是遇到緊急突發需求v2,而uat上已經有了v1。v1對應uat分支,v2對應uat_temp分支。
cc和dd項目共用配置文件。
cc的配置文件:
server: port: 8080 spring: application: name: cc profiles: active: api cloud: config: uri: http://localhost:8081 #配置中心 label: dev #版本、分支 profile: api management: security: enabled: false
dd的配置文件
server: port: 8080 spring: application: name: dd profiles: active: api cloud: config: uri: http://localhost:8081 #配置中心 label: dev #版本、分支 profile: api management: security: enabled: false
配置中心文件
其中application.yml、application-env.yml是公共配置。cc開始的爲cc項目中的配置。dd開始的爲dd項目中的配置。
引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
application.yml配置
security: basic: enabled: true user: name: admin password: admin
application.yml配置
spring: cloud: config: uri: http://admin:admin@localhost:8888 #配置中心 label: prod #版本、分支 profile: env