Spring Cloud Config
Spring Cloud Config是Spring Cloud團(tuán)隊創(chuàng)建的一個項目卸留,用來為分布式系統(tǒng)中的基礎(chǔ)設(shè)施和微服務(wù)應(yīng)用提供集中化的外部配置支持,它分為服務(wù)端與客戶端兩個部分咆课。
其中服務(wù)端也稱為分布式配置中心慎菲,它是一個獨(dú)立的微服務(wù)應(yīng)用爸吮,用來連接配置倉庫并為客戶端提供獲取配置信息钙态、加密/解密信息等訪問接口述呐;
而客戶端則是微服務(wù)架構(gòu)中的各個微服務(wù)應(yīng)用或基礎(chǔ)設(shè)施寺惫,它們通過指定的配置中心來管理應(yīng)用資源與業(yè)務(wù)相關(guān)的配置內(nèi)容疹吃,并在啟動的時候從配置中心獲取和加載配置信息。
Spring Cloud Config實(shí)現(xiàn)了對服務(wù)端和客戶端中環(huán)境變量和屬性配置的抽象映射西雀,所以它除了適用于Spring構(gòu)建的應(yīng)用程序之外萨驶,也可以在任何其他語言運(yùn)行的應(yīng)用程序中使用。
由于Spring Cloud Config實(shí)現(xiàn)的配置中心默認(rèn)采用Git來存儲配置信息蒋搜,所以使用Spring Cloud Config構(gòu)建的配置服務(wù)器篡撵,天然就支持對微服務(wù)應(yīng)用配置信息的版本管理,并且可以通過Git客戶端工具來方便的管理和訪問配置內(nèi)容豆挽。
當(dāng)然它也提供了對其他存儲方式的支持育谬,比如:SVN倉庫、本地化文件系統(tǒng)帮哈。
由于SpringCloud在Edgware
之后的版本新增的一種配置方式:采用數(shù)據(jù)庫存儲配置信息膛檀。
我們的demo版本使用的是Edgware.SR5
版本,利用Git進(jìn)行配置中心的管理一直都飽受爭議,所以我在這邊只進(jìn)行了數(shù)據(jù)庫存儲方式的介紹咖刃。
構(gòu)建一個配置中心的服務(wù)端
在pom文件中引入以下幾個主要依賴:
- spring-cloud-config-server:配置中心的主要依賴
- spring-cloud-starter-eureka-server:將服務(wù)注冊至eureka注冊中心
- spring-boot-starter-jdbc:因?yàn)槭褂玫氖菙?shù)據(jù)庫存儲泳炉,所以必須引入jdbc的依賴
- mysql-connector-java:MySQL數(shù)據(jù)庫的連接包
- flyway-core:主要用來管理schema,具體介紹可以看flyway講解
<parent>
<groupId>com.wkedong.springcloud</groupId>
<artifactId>parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<!-- spring-cloud-config-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- spring-cloud-starter-eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>5.0.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
準(zhǔn)備schema創(chuàng)建文件嚎杨。在resources下創(chuàng)建schema目錄花鹅,并加入V1.0__Base_version.sql
文件,具體內(nèi)容如下:
DROP TABLE IF EXISTS properties;
CREATE TABLE `properties` (
`id` int(11) AUTO_INCREMENT
COMMENT '主鍵'
PRIMARY KEY,
`key` varchar(50) NOT NULL
COMMENT 'key值_屬性名',
`value` varchar(500) NOT NULL
COMMENT 'value值_屬性值',
`application` varchar(50) NOT NULL
COMMENT '應(yīng)用名',
`profile` varchar(50) NOT NULL
COMMENT '激活的剖面',
`label` varchar(50) NOT NULL
COMMENT '資源的label'
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
V1.1__Update_version.sql
:
INSERT INTO properties VALUES(1, 'name', 'test-dev-master', 'service-producer', 'dev', 'master');
INSERT INTO properties VALUES(2, 'name', 'test-pro-master', 'service-producer', 'pro', 'master');
INSERT INTO properties VALUES (3, 'name', 'test-dev-develop', 'service-producer', 'dev', 'develop');
INSERT INTO properties VALUES (4, 'name', 'test-pro-develop', 'service-producer', 'pro', 'develop');
INSERT INTO properties VALUES(5, 'name', 'test-dev-master', 'service-consumer', 'dev', 'master');
INSERT INTO properties VALUES(6, 'name', 'test-pro-master', 'service-consumer', 'pro', 'master');
INSERT INTO properties VALUES (7, 'name', 'test-dev-develop', 'service-consumer', 'dev', 'develop');
INSERT INTO properties VALUES (8, 'name', 'test-pro-develop', 'service-consumer', 'pro', 'develop');
該sql文件會由flyway自動運(yùn)行
對工程做一些配置文件的操作application.yml
:
eureka:
client:
healthcheck:
enabled: true #健康檢查開啟
service-url:
defaultZone: http://localhost:6060/eureka/
server:
port: 6010
spring:
application:
name: config
# cloud:
# config:
# server:
# git:
# uri: https://github.com/wkedong/Spring-Cloud-Config.git
profiles:
active: jdbc
cloud:
config:
server:
jdbc:
sql: SELECT `KEY`, `VALUE` from PROPERTIES where APPLICATION=? and PROFILE=? and LABEL=?
datasource:
url: jdbc:mysql://127.0.0.1:3306/spring_cloud_config?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
flyway:
locations: /schema
baseline-on-migrate: true
創(chuàng)建應(yīng)用主類枫浙,具體內(nèi)容如下:
/**
* @author wkedong
*/
@EnableDiscoveryClient
@EnableConfigServer
@SpringBootApplication
public class ConfigApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ConfigApplication.class).web(true).run(args);
}
}
服務(wù)端配置驗(yàn)證
完成以上的工程搭建之后刨肃,我們就可以驗(yàn)證配置中心的設(shè)置。
首先啟動配置中心應(yīng)用箩帚,然后訪問 http://localhost:6010/service-producer/dev/develop真友,來獲取service-producer服務(wù)的dev環(huán)境下develop分支的配置文件,結(jié)果如下:
<Environment>
<name>service-producer</name>
<profiles>
<profiles>dev</profiles>
</profiles>
<label>develop</label>
<version/>
<state/>
<propertySources>
<propertySources>
<name>service-producer-dev</name>
<source>
<name>test-dev-develop</name>
</source>
</propertySources>
</propertySources>
</Environment>
至此紧帕,SpringCloud的配置中心的數(shù)據(jù)庫存儲方式就搭建完成了盔然,后續(xù)demo會介紹如何在各個微服務(wù)中去獲取配置中心的配置進(jìn)行操作。
注意事項:后續(xù)所有需要加載配置中心配置的工程所對應(yīng)的工程配置文件都必須在bootstrap.yml中配置配置中心信息是嗜,否則會加載失敗愈案。如果在application.yml中配置,在啟動工程時候會發(fā)現(xiàn)鹅搪,配置中心的地址端口號為8888而不是你配置的刻帚。
文章目錄:
整體demo的GitHub地址:Spring-Cloud