Spring Cloud_31_SpringCloud配置中心/例子
阿新 • • 發佈:2019-01-09
SpringCloud配置中心/例子
- Config的作用:對叢集配置的統一管理
- Config的作用:對叢集配置的統一管理
- 客戶端連線配置伺服器的時候預設連線8888埠
1、建立Config伺服器
- 建立Config伺服器之前,需要先建立SVN伺服器,上一章節已經建立完成
- 現在來建立Config伺服器
1.1、引入依賴
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId >
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- Config-Server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<!-- SVN-Kit -->
<dependency>
<groupId>org.tmatesoft.svnkit</groupId>
<artifactId>svnkit</artifactId >
<version>1.9.0</version>
</dependency>
1.2、配置SVN倉庫applicaiton.yml
- SpringCloud預設使用Git倉庫,如果SVN和GIT倉庫都沒有配置,則會報錯
- 配置profile
- git:預設值,表示去Git倉庫讀取配置檔案
- subversion:表示去SVN倉庫讀取配置檔案
- native:將會去本地的檔案系統中讀取配置檔案
- vault:去Vault中讀取配置檔案,Vault是一款資源控制工具,可對資源實現安全訪問
server:
port: 8888
##為了方便測試,關閉安全管理機制
management:
security:
enabled: false
##配置SVN倉庫
spring:
profiles:
active: subversion
cloud:
config:
server:
svn:
uri: https://USER-20170523PW/svn/my-aitemi/
username: aitemi
password: aitemi
##預設到SVN根目錄下的trunk目錄中讀取配置檔案
default-label: aitemi
1.3、啟動類
package com.atm.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer//開啟伺服器
public class ConfigServerApp {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApp.class, args);
}
}
- SVN目錄中建立檔案,注意建立的檔案命名規則,本人在測試時使用first.yml無法訪問,命名為first-test.yml則可以訪問
2、建立Config客戶端
2.1、引入依賴
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.4.RELEASE</version>
</dependency>
<!-- 檢視叢集例項端點 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>1.5.4.RELEASE</version>
</dependency>
2.2、配置檔案bootstrap.yml
spring:
## 配置了spring.application.name,和cloud.config.profile,則讀取atm-config-client-dev.yml
application:
name: atm-config-client
cloud:
config:
url: http://localhost:8888
## 讀取的檔案是 atm-config-client-dev.yml
profile: dev
spring:
cloud:
config:
url: http://localhost:8888
## 沒有配置spring.applicaiton.name,但是配置了spring.cloud.config.name,則讀取檔案不變,依舊是atm-config-client-dev.yml
profile: dev
name: atm-config-client
spring:
cloud:
config:
url: http://localhost:8888
## 兩者均沒有配置,只配置了spring.cloud.profile,預設讀取application-dev.yml
profile: dev
2.3、ReadConfigController
package com.atm.cloud;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 讀取遠端的配置
*/
@RestController
public class ReadConfigController {
@Autowired
private Environment environment;
@GetMapping("/read")
public String readConfig() {
return environment.getProperty("test.user.name");
}
}
3、目錄配置讀取總結
讀取總結(伺服器配置目錄,客戶端配置讀取哪份檔案)
- 伺服器:spring.cloud.config.server.default-label=aitemi,到SVN下的指定目錄中讀取
- 客戶端:spring.application.name=atm-config-client,讀取的配置檔案的名稱,
- 客戶端:spring.cloud.config.profile=dev
讀取多分配置檔案:spring.cloud.config.profile=hystrix,zuul
- 客戶端配置目錄:spring.cloud.config.label,可以配置客戶端讀取配置檔案的目錄,會覆蓋伺服器所配置的default-label
spring:
cloud:
config:
label: aitemi2
4、重新整理配置
- 訪問/refresh端點
## 為了方便測試,關閉安全管理
management:
security:
enabled: false
- 模擬POST請求
package com.atm.cloud;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class RefreshClientMain {
public static void main(String[] args) throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
// 傳送post請求
HttpPost post = new HttpPost("http://localhost:8080/refresh");
HttpResponse response = client.execute(post);
System.out.println(EntityUtils.toString(response.getEntity()));
}
}
5、重新整理Bean
- 在實際應用中,在重新整理配置的情況下,還需要重新整理對應的bean
package com.atm.cloud;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
@Configuration
public class MyConfig {
@Bean
@RefreshScope
public Person person(Environment env) {
// 讀取名字建立Person
String name = env.getProperty("test.user.name");
// 輸出Person名字
System.out.println("初始化Person bean:" + name);
// 建立一個Bean
Person p = new Person();
p.setName(name);
return p;
}
}
@Autowired
private Person person;
@GetMapping("/personName")
public String readPersonName() {
return person.getName();
}