Dalston.RELEASEjava
Spring Cloud Config爲分佈式系統中的外部配置提供服務器和客戶端支持。使用Config Server,您能夠在全部環境中管理應用程序的外部屬性。客戶端和服務器上的概念映射與Spring Environment
和PropertySource
抽象相同,所以它們與Spring應用程序很是契合,但能夠與任何以任何語言運行的應用程序一塊兒使用。隨着應用程序經過從開發人員到測試和生產的部署流程,您能夠管理這些環境之間的配置,並肯定應用程序具備遷移時須要運行的一切。服務器存儲後端的默認實現使用git,所以它輕鬆支持標籤版本的配置環境,以及能夠訪問用於管理內容的各類工具。很容易添加替代實現,並使用Spring配置將其插入。mysql
分佈式系統面臨的–配置文件問題git
微服務意味着要將單體應用中的業務拆分紅一個個子服務,每一個服務的粒度相對較小,所以系統中會出現大量的服務,因爲每一個服務都須要必要的配置信息才能運行,因此一套集中式的,動態的配置管理設施是必不可少的。spring cloud提供了configServer來解決這個問題,咱們每個微服務本身帶着一個application.yml,那上百個的配置文件修改起來,使人頭疼!web
什麼是SpringCloud config分佈式配置中心?spring
spring cloud config 爲微服務架構中的微服務提供集中化的外部支持,配置服務器爲各個不一樣微服務應用的全部環節提供了一箇中心化的外部配置。sql
spring cloud config 分爲服務端和客戶端兩部分。bootstrap
服務端也稱爲 分佈式配置中心,它是一個獨立的微服務應用,用來鏈接配置服務器併爲客戶端提供獲取配置信息,加密,解密信息等訪問接口。後端
客戶端則是經過指定的配置中心來管理應用資源,以及與業務相關的配置內容,並在啓動的時候從配置中心獲取和加載配置信息。配置服務器默認採用git來存儲配置信息,這樣就有助於對環境配置進行版本管理。而且可用經過git客戶端工具來方便的管理和訪問配置內容。api
spring cloud config 分佈式配置中心能幹嗎?服務器
spring cloud config 分佈式配置中心與GitHub整合
因爲spring cloud config 默認使用git來存儲配置文件 (也有其餘方式,好比自持SVN 和本地文件),可是最推薦的仍是git ,並且使用的是 http / https 訪問的形式。
一、上傳配置到碼雲
上傳配置文件到碼雲上面,關於git的操做能夠參考個人上一篇博客~
二、新建springcloud-config-server-3344項目,添加依賴
dependencies> <!--web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--config--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> <version>2.1.1.RELEASE</version> </dependency> <!--eureka--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> /dependencies>
三、編寫application.yaml配置
server:
port: 3344
spring:
application:
name: springcloud-config-server
# 鏈接碼雲遠程倉庫
cloud:
config:
server:
git:
uri: https://gitee.com/zhang-zhixi/springcloud-config.git
# 不加這個配置會報Cannot execute request on any known server 這個錯:鏈接Eureka服務端地址不對
# 或者直接註釋掉eureka依賴 這裏暫時用不到eureka
eureka:
client:
register-with-eureka: false
fetch-registry: false
四、測試讀取碼雲上的配置文件
開啓3344端口
訪問:http://localhost:3344/application-dev.yaml
一、在碼雲項目文件中新建配置:config-client.yaml
spring:
profiles:
active: dev
---
server:
port: 8201
# spring配置
spring:
profiles: dev
application:
name: springcloud-provider-dept
#Eureka配置
eureka:
client:
service-url: #監控頁面~
defaultZone: http://eureka7001.com:7001/eureka/
---
server:
port: 8202
# spring配置
spring:
profiles: test
application:
name: springcloud-provider-dept
#Eureka配置
eureka:
client:
service-url: #監控頁面~
defaultZone: http://eureka7001.com:7001/eureka/
二、上傳到碼雲
三、新建springcloud-config-server-3355項目,導入pom依賴
<dependencies> <!--config--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> <version>2.1.1.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
四、編寫配置:resources
bootstrap.yml 是系統級別的配置
spring:
cloud:
config:
# 用於獲取遠程屬性的應用程序的名稱
name: config-client
# 遠程服務器的URI(默認爲http:// localhost:8888)。
uri: http://localhost:3344
# 用於拉取遠程配置屬性的標籤名稱。 默認設置是在服務器上設置的(一般是基於git的服務器的「 master」)
label: master
# 獲取遠程配置的默認環境
profile: dev
application.yml 是用戶級別的配置
server:
port: 3355
spring:
application:
name: springcloud-config-client-3355
五、編寫controller:ClientController
@RestController public class ClientController { // 讀取端口 @Value("${server.port}") private String serverPort; // 讀取應用名稱 @Value("${spring.application.name}") private String appName; // 讀取eureka @Value("${eureka.client.service-url.defaultZone}") private String eurekaConfig; @RequestMapping("/config") public String config() { return serverPort + "\n" + appName + "\n" + eurekaConfig + "\n"; } }
六、編寫主啓動文件Client_3355
@SpringBootApplication public class Client_3355 { public static void main(String[] args) { SpringApplication.run(Client_3355.class, args); } }
七、測試
1.啓動springcloud-config-server-3344(服務端訪問git)
訪問http://localhost:3344/config-client-dev.yaml,能夠拿到git上的文件,說明成功讀取到client配置文件、
2.啓動springcloud-config-server-3355(客戶端訪問服務端)
實際上是客戶端經過訪問服務端從而拿到git上面的文件
3.訪問http://localhost:8201/config
一、建立配置文件:
本地新建config-dept.yml和config-eureka.yml並提交到碼雲倉庫
config-eureka.yaml:
spring:
profiles:
active: dev
---
server:
port: 7001
# spring配置
spring:
profiles:
active: dev
#Eureka配置
eureka:
instance:
hostname: eureka7001.com #Eureka服務端的實例名字
client:
register-with-eureka: false #表示是否向 Eureka 註冊中心註冊本身(這個模塊自己是服務器,因此不須要)
fetch-registry: false #fetch-registry若是爲false,則表示本身爲註冊中心
service-url: #監控頁面~
#重寫Eureka的默認端口以及訪問路徑 --->http://localhost:7001/eureka/
# 單機: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# 集羣(關聯):7001關聯700二、7003
defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
---
server:
port: 7001
# spring配置
spring:
profiles:
active: test
#Eureka配置
eureka:
instance:
hostname: eureka7001.com #Eureka服務端的實例名字
client:
register-with-eureka: false #表示是否向 Eureka 註冊中心註冊本身(這個模塊自己是服務器,因此不須要)
fetch-registry: false #fetch-registry若是爲false,則表示本身爲註冊中心
service-url: #監控頁面~
#重寫Eureka的默認端口以及訪問路徑 --->http://localhost:7001/eureka/
# 單機: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
# 集羣(關聯):7001關聯700二、7003
defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
config-dept.yaml:
spring: profiles: active: dev # 環境一 --- server: port: 8001 # mybatis配置 mybatis: type-aliases-package: com.zhixi.pojo config-location: classpath:mybatis/mybatis-config.xml mapper-locations: classpath:mybatis/mapper/*.xml # spring配置 spring: profiles: dev application: name: springcloud-provider-dept # 三個服務名稱一致 datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: org.gjt.mm.mysql.Driver url: jdbc:mysql://localhost:3306/db01?userSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: zhixi158 # Eureka配置:配置服務註冊中心地址 eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: springcloud-provider-dept-8001 #修改Eureka上的默認描述信息 # info配置 info: # 項目的名稱 app.name: zhixi-springcloud # 公司的名稱 company.name: com.zhixi.study # 環境一 --- server: port: 8001 # mybatis配置 mybatis: type-aliases-package: com.zhixi.pojo config-location: classpath:mybatis/mybatis-config.xml mapper-locations: classpath:mybatis/mapper/*.xml # spring配置 spring: profiles: test application: name: springcloud-provider-dept # 三個服務名稱一致 datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: org.gjt.mm.mysql.Driver url: jdbc:mysql://localhost:3306/db02?userSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: zhixi158 # Eureka配置:配置服務註冊中心地址 eureka: client: service-url: defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/ instance: instance-id: springcloud-provider-dept-8001 #修改Eureka上的默認描述信息 # info配置 info: # 項目的名稱 app.name: zhixi-springcloud # 公司的名稱 company.name: com.zhixi.study
二、上傳到git
上傳方法跟上面同樣,沒必要多說了~
三、新建模塊
新建springcloud-config-eureka-7001模塊,並將原來的springcloud-eureka-7001模塊下的內容拷貝的該模塊。
1.清空該模塊的application.yml配置,並新建bootstrap.yml鏈接遠程配置
spring:
cloud:
config:
name: config-eureka # 倉庫中的配置文件名稱
label: master
profile: dev
uri: http://localhost:3344
2.application.yaml配置
spring:
application:
name: springcloud-config-eureka-7001
3.在pom.xml中添加spring cloud config依賴
<!--config--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> <version>2.1.1.RELEASE</version> </dependency>
4.主啓動類EurekaConfig_Run_7001
@SpringBootApplication @EnableEurekaServer public class EurekaConfig_Run_7001 { public static void main(String[] args) { SpringApplication.run(EurekaConfig_Run_7001.class, args); } }
5.測試
啓動 Config_Server_3344
訪問http://localhost:3344/config-eureka-dev.yaml,出現如下頁面說明可以成功訪問到git上的配置:
啓動springcloud-config-eureka-7001
訪問:http://localhost:7001/,能夠看到成功訪問到了註冊中心
一、新建模塊
新建springcloud-config-dept-8001模塊並拷貝springcloud-provider-dept-8001的內容
同理導入spring cloud config依賴、清空application.yml 、新建bootstrap.yml配置文件並配置
二、pom依賴
<dependencies> <!--config--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> <version>2.1.1.RELEASE</version> </dependency> <!--咱們須要拿到實體類,因此要配置api moudle--> <dependency> <groupId>com.zhixi</groupId> <artifactId>springcloud-01-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!--test--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <!--熱部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <!--Eureka--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!--完善監控信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--Eureka依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!--actuator完善監控信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies>
三、編寫配置信息
application.yaml
spring:
application:
name: springcloud-provider-config-dept-8001
bootstrap.yaml
spring:
cloud:
config:
name: config-dept # 倉庫中的配置文件名稱
label: master
profile: dev
uri: http://localhost:3344
四、編寫主啓動類
// 啓用發現客戶端 @EnableDiscoveryClient // 開啓Eureka客戶端註解,在服務啓動後自動向註冊中心註冊服務 @EnableEurekaClient // 啓動類 @SpringBootApplication public class DeptConfigProvider_8001 { public static void main(String[] args) { SpringApplication.run(DeptConfigProvider_8001.class, args); } }
五、測試
啓動springcloud-config-server-3344(服務端訪問git)
啓動springcloud-config-eureka-7001(註冊中心)
啓動springcloud-provider-config-dept-8001(服務提供)
能夠看到遠程配置的8001已經生效了~
而後經過遠程git服務來訪問業務,發現也是沒有問題的: