《7天學會spring cloud系列》之建立配置管理服務器及實現分佈式配置管理應用。css
本文涉及到的項目:java
分佈式配置管理應該是分佈式系統和微服務應用的第一步。想象一下若是你有幾十個服務或應用須要配置,並且每一個服務還分爲開發、測試、生產等不一樣維度的配置,那工做量是至關大的,並且還容易出錯。若是能把各個應用的配置信息集中管理起來,使用一套機制或系統來管理,那麼將極大的提升系統開發的生產效率,同時也會提升系統開發環境和生產環境運行的一致性。mysql
在傳統開發中咱們每每須要本身開發「配置管理服務器」,你可使用redis、ldap、zookeeper、db等來存放統一配置信息,而後開發一個管理界面來進行管理。傳統的作法沒什麼問題,和spring cloud所提供的配置管理方案相比,就是前者須要本身開發,然後者直接簡單使用現成的組件便可。固然還有很重要的一點,spring 配置管理模塊因爲是spring boot核心來實現的,所以作了大量的工做,能夠把一些啓動參數進行外部配置,這在傳統的方案中是很難辦到的,由於涉及到要改寫第三方組件的問題,難度很大。好比web應用的綁定端口,傳統應用只能在tomcat配置文件裏改,而spring cloud卻能夠放到遠程,相似的還有數據庫鏈接、安全框架配置等。git
要使用spring cloud分佈式配置文件整體上分爲3個大的步驟,首選你須要建立存放配置文件的倉庫,而後建立一個配置文件服務器,該服務器將配置文件信息轉化爲rest接口數據,而後建立一個應用服務,該服務演示使用分佈式配置文件信息。github
1)建立配置文件存放倉庫web
Spring cloud使用git或svn存放配置文件,默認狀況下使用git,所以你須要安裝git私服或者直接使用互聯網上的github或者git.oschina,這裏推薦使用git.oschina。本文示例使用的是git.oschina,建立好git工程後,也就是文章開頭所提到的工程,在此工程再建立一個文件夾cloud-config-repo來存放配置文件。而後建立兩個配置文件:redis
這兩個文件分別對應開發環境和測試環境所須要的配置信息,配置信息以下:spring
mysqldb.datasource.url=jdbc\:mysql\://10.0.12.170\:3306/test?useUnicode\=true&characterEncoding\=utf-8sql
mysqldb.datasource.username=csst數據庫
mysqldb.datasource.password=csst
logging.level.org.springframework.web:DEBUG
配置信息提供了數據庫鏈接參數等,這是由於後面的應用服務中使用到了數據庫。
2)建立spring cloud配置服務器
配置文件倉庫建立好了後,就須要建立配置管理服務器,如前所述該服務器只是將配置文件轉換爲rest接口服務,不作其它用途。這個服務器的功能也是spring cloud提供的,因此咱們只須要引入相關jar包,稍微設置一下便可。建立該服務應用,你須要首選建立一個空的maven工程:
而後在這個工程中增長一個類,命名爲:ConfigServerApplication,代碼以下:
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
能夠看到,咱們只須要用@EnableConfigServer激活該應用爲配置文件服務器便可。如此以來該應用啓動後就會完成前面提到的功能,即:讀取遠程配置文件,轉換爲rest接口服務。
固然,須要配置遠程配置文件讀取路徑,在application.properties中:
server.port=8888
spring.cloud.config.server.git.uri=https://git.oschina.net/zhou666/spring-cloud-7simple.git
spring.cloud.config.server.git.searchPaths=cloud-config-repo
其中server.port是配置當前web應用綁定8888端口,git.uri指定配置文件所在的git工程路徑,searchPaths表示將搜索該文件夾下的配置文件(咱們的配置文件放在spring-cloud-7simple這個工程的cloud-config-repo文件夾下)。
最後,還須要在pom文件中增長配置服務器的相關依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
如此以來,配置文件服務器就創建好了,能夠直接啓動了,服務端口是8888,應用只須要綁定改服務器的uri和端口號就能夠拿到配置信息了。
3) 建立一個服務使用該遠程配置
如今能夠建立一個服務使用該遠程配置了,你能夠在遠程配置中定義一個簡單的自定義信息,好比:
my.message=helloword
而後使用前面咱們提到的spring boot helloworld應用來讀取這個信息。固然,限於篇幅咱們直接使用比較複雜的一個服務來演示這個配置管理器的使用,這個服務須要用到數據庫訪問,數據庫訪問層咱們使用的是mybaits,數據表只有一個,DDL以下:
CREATE TABLE `user` (
`id` varchar(50) NOT NULL DEFAULT '',
`username` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
建立好數據表後,回到咱們的應用服務:
該服務使用DataSourceProperties封裝了mybatis加載配置信息。要拿到遠程配置信息,須要設置配置管理服務器地址,該配置設置在:
bootstrap.properties
該配置文件信息以下:
spring.cloud.config.uri=http://127.0.0.1:${config.port:8888}
spring.cloud.config.name=cloud-config
spring.cloud.config.profile=${config.profile:dev}
其中config.uri指定遠程加載配置信息的地址,就是前面咱們剛創建的配置管理服務器的地址,綁定端口8888,其中config.port:8888,表示若是在命令行提供了config.port參數,咱們就用這個端口,不然就用8888端口。config.name表示配置文件名稱,查看咱們前面建立配置文件,是這個名稱:
cloud-config-dev.properties
能夠分紅兩部分: {application}- {profile}.properties
因此咱們配置config.name爲cloud-config,config.profile爲dev,其中dev表示開發配置文件,配置文件倉庫裏還有一個測試環境的配置文件,切換該配置文件只須要將dev改成test便可,固然這個參數也能夠由啓動時命令行傳入,如:
java -jar cloud-simple-service-1.0.0.jar --config.profile =test
此時應用就會加載測試環境下的配置信息。