本公司配置數據的管理是通過mysql進行配置管理,因為已經搭建好了,所以自己動手重新搭建一遍,熟悉整個流程。有關項目源碼后期會補上github地址
微服務要實現集中管理微服務配置、 不同環境不同配置 、 運行期間也可動態調整 、 配置修改后可以自動更新的需求 ,spring cloud config同時滿足了以上要求。
一、項目搭建
本次主要用三個微服務
(1)eureka-server: 7001 注冊中心
(2)config-server : 5001 配置中心
(3)product-server : 8001 商品微服務
1、eureka-server注冊中心
注冊中心很簡單,這里不在重復些,注冊中心沒有變化。可以看之前寫的博客 : springcloud(3)---eureka服務注冊與發現
2、配置中心微服務
1、pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<!--服務中心jar包--> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> <!--配置中心jar包--> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-config-server</artifactid> </dependency> <!--連接msql數據庫相關jar包--> <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> |
2、application.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
#服務名稱 server: port: 5001 #連接配置信息 spring: application: name: config-server-jdbc profiles: active: jdbc cloud: config: server: default -label: dev jdbc: sql: select akey , avalue from config_server where application=? and aprofile=? and label=? ##################################################################################################### # mysql 屬性配置 datasource: driver- class -name: com.mysql.jdbc.driver url: jdbc:mysql: //127.0.0.1:3306/test username: root password: root ##################################################################################################### #指定注冊中心地址 eureka: client: serviceurl: defaultzone: http: //localhost:7001/eureka/ |
這里主要講下連接配置信息
(1) spring.profiles.active=jdbc ,自動實現jdbcenvironmentrepository。
(2)sql語句自定義,否則會默認為“select key, value from properties where application=? and profile=? and label=?”,具體可以參考 jdbcenvironmentrepository 實現。
(3)本人數據庫建表為config_server,由于key,value和profile是mysql關鍵字,所以我都在最前面加了a。當然表名字段名都可以自定義。
(4) {application} 對應客戶端的"spring.application.name"屬性;
{aprofile} 對應客戶端的 "spring.profiles.active"屬性(逗號分隔的列表); 和
{label} 對應服務端屬性,這個屬性能標示一組配置文件的版本.
(5)只要 select出來是兩個字段 ,框架會 自動包裝到environment的map<key,value> 。
3、mysql數據
4、springboot啟動類
添加 @enableconfigserver 注解
1
2
3
4
5
6
7
8
|
@springbootapplication @enableconfigserver public class configserverapplication { public static void main(string[] args) { springapplication.run(configserverapplication. class , args); } } |
3、product-service微服務
1、pom.xml
1
2
3
4
5
6
7
8
9
10
|
<!--服務中心jar--> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid> </dependency> <!--配置中心客戶端jar--> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-config-client</artifactid> |
2、bootstrap.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#指定注冊中心地址 eureka: client: serviceurl: defaultzone: http: //localhost:7001/eureka/ #服務的名稱 spring: application: name: product-service #指定從哪個配置中心讀取 cloud: config: discovery: service-id: config-server-jdbc enabled: true profile: dev label: dev server: port: 8001 |
這里為什么用bootstrap.yml而不用application.yml,是因為若application.yml 和bootstrap.yml 在同一目錄下,
則 bootstrap.yml 的加載順序要高于application.yml ,即bootstrap.yml 會優先被加載。
為何需要把 config server 的信息放在 bootstrap.yml 里?
當使用 spring cloud 的時候,配置信息一般是從 config server 加載的,為了取得配置信息(比如密碼等),你需要一些提早的或引導配置。
因此,把 config server 信息放在 bootstrap.yml,用來加載真正需要的配置信息。
3、configcontroller類(測試用)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@restcontroller @requestmapping ( "/api/v1/product" ) public class configcontroller { @value ( "${item_url}" ) private string url; /** * 輸出url */ @requestmapping ( "url" ) public void list(){ system.out.println(url); } |
4、測試
通過訪問:http://localhost:8001/api/v1/product/url 進入斷點。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/qdhxhz/p/9624386.html