019 搭建config配置中心

1 config配置中心

    1-1 pom依賴

        這裏引入 spring-cloud-config-server 便可,spring-boot-starter-security 只是爲了給配置中心加一個訪問驗證,能夠忽略該引用:git

<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
	</dependencies>
	
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Camden.SR3</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

    1-2 配置文件 application.yml

    研發項目時,公司確定會有幾套環境,生產、測試、開發、本地等,因此咱們的配置文件也應該是分別對應的,下圖中是一個示例:config-file 是遠程的git倉庫,test 是項目下的一級文件夾,test下有兩個文件夾分別存放 prd 和 dev 環境的配置文件,application.properties 是公用配置文件,config-test.properties中的 config-test 是其中一個微服務的名稱,這樣微服務公共的配置放到 application.properties,微服務個性化的配置在各自的配置文件中。注意:微服務的個性化配置會覆蓋 application.properties 中的相同配置。spring

    下面的配置默認加載遠程倉庫 test/dev 下的配置,若是密碼中含有特殊字符,能夠加轉義符「\」,或者直接用單引號 「 ‘ 」 將密碼引發來,這裏用戶名默認爲user,密碼:12345bootstrap

spring:
  cloud:
    config:
      server:
        git:
          uri: https://code.aliyun.com/995586041/config-file.git
          searchPaths: test/dev
          username: 995586041@qq.com
          password: ',******'
          repos:
            prd:
              pattern: "*/prd*"
              uri: https://code.aliyun.com/995586041/config-file.git
              searchPaths: test/prd
              username: 995586041@qq.com
              password: \,******
            dev:
              pattern: "*/dev*"
              uri: https://code.aliyun.com/995586041/config-file.git
              searchPaths: test/dev
              username: 995586041@qq.com
              password: ',******'
server:
  port: 8888
security:
  user:
    password: ${CONFIG_SERVICE_PASSWORD:12345}

    1-3 啓動類

        加上 @EnableConfigServer 註解便可bash

@SpringBootApplication
@EnableConfigServer
public class ConfigApplication {

	public static void main(String[] args) {
		SpringApplication.run(ConfigApplication.class, args);
	}
}

    1-4 訪問

        http://localhost:8888/test/application,若是上面設置了訪問密碼,會提示輸入用戶名和密碼,填入相關信息進行驗證,而後能夠看到相關配置信息:app

2 測試配置中心

    1-1 pom文件

<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
	</dependencies>

    1-2 配置文件 bootstrap.properties

        這裏配置文件使用 bootstrap.properties,項目啓動時會先加載 bootstrap.properties 而後再加載 application.properties,這裏咱們指定 prd ,這樣咱們就能夠指定了配置文件,注意這裏的微服務名稱爲:config-test ,下邊會用到ide

server.port = 8082
spring.profiles.active = prd
spring.application.name = config-test

spring.cloud.config.uri = http://127.0.0.1:8888

spring.cloud.config.fail-fast = true
spring.cloud.config.username = user
spring.cloud.config.password = 12345
spring.cloud.config.profile=prd

goldleaf.test01 = test01 ${spring.profiles.active} bootstrap.properties
goldleaf.test05 = test05 ${spring.profiles.active} bootstrap.properties
goldleaf.test06 = test06 ${spring.profiles.active} bootstrap.properties

    1-3 啓動類及測試接口

        能夠看到,咱們這裏並無加有關配置中心的特殊註解,我只是寫了一個測試接口spring-boot

@SpringBootApplication
@RestController
public class UserApplication {

	@Value("${goldleaf.test01}")
	private String test01;

	@Value("${goldleaf.test02}")
	private String test02;

	@Value("${goldleaf.test03}")
	private String test03;

	@Value("${goldleaf.test05}")
	private String test05;

	@Value("${goldleaf.test06}")
	private String test06;
	
	public static void main(String[] args) {
		SpringApplication.run(UserApplication.class, args);
	}
	
	@GetMapping("/test")
	public String getConfig() {
		StringBuilder builder = new StringBuilder();
		builder.append("test01:" + test01 + "\r\n");
		builder.append("test02:" + test02 + "\r\n");
		builder.append("test03:" + test03 + "\r\n");
		builder.append("test05:" + test05 + "\r\n");
		builder.append("test06:" + test06 + "\r\n");
		return builder.toString();
	}
}

    1-4 測試

        如今咱們有了三個配置文件:項目裏的 bootstrap.properties、遠程的 application.properties 和遠程的 config-test.properties。配置說明:1). 在上面三個文件中分別定義了 test0一、test0二、test03,用來講明三個配置文件中的配置都是起做用的;2). 在上面三個文件中同時定義了test05,用來講明三個文件的優先級;3). 在 bootstrap.properties 和 application.properties 中同時定義了 test06 ,用來肯定兩者的優先級。啓動項目以後,如今咱們經過訪問 config-test 的test接口查看一下結果:微服務

        

        test01-03,說明三個文件中的配置都有加載;test05 說明微服務的個性化配置會覆蓋前面的配置,優先級最高;test06 說明默認狀況下遠程倉庫的 application.properties 優先級高於 bootstrap.properties測試

        優先級順序:遠程config-test > 遠程application.properties > 本地bootstrap.propertiesui

3 本地覆蓋遠程配置

    在遠程倉庫的git倉庫中添加下列配置:

# 容許本地配置覆蓋遠程配置
spring.cloud.config.allowOverride=true
spring.cloud.config.overrideNone=true
spring.cloud.config.overrideSystemProperties=false

    而後訪問測試接口:http://127.0.0.1:8082/test,test0五、test06加載的是本地bootstrap.properties中的配置信息:

4 手動刷新配置

    開發的時候,不免會更改某些配置,若是每次更改配置都進行服務的從新發布,有點讓人頭大,因此咱們在更改配置文件以後,手動刷新一下配置。

    在非config端的pom文件中增長 spring-boot-starter-actuator 依賴:

<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
	</dependencies>

    修改git倉庫的配置文件以後,POST方式調用服務的 /refresh 端點,如:http://127.0.0.1:8082/refresh 這裏會返回有哪些配置點被修改:

    查看結果:

5 項目代碼

        core-simple 項目:https://code.aliyun.com/995586041/core-simple.git

    config-server:https://code.aliyun.com/995586041/config.git

    config-client:https://code.aliyun.com/995586041/config-client.git

    config-file:https://code.aliyun.com/995586041/config-file.git

相關文章
相關標籤/搜索