一起來學Spring Cloud | 第七章:分布式配置中心(Spring Cloud Config)


上一章節,我們講解了服務網關zuul,本章節我們從git和本地兩種存儲配置信息的方式來講解springcloud的分布式配置中心-Spring Cloud Config。

一、Spring Cloud Config簡介:

Spring Cloud Config項目是一個解決分布式系統的配置管理方案。它包含了Client和Server兩個部分,server提供配置文件的存儲、以接口的形式將配置文件的內容提供出去,client通過接口獲取數據、並依據此數據初始化自己的應用。

二、新建springcloud-config-server模塊:

1. 參考:一起來學Spring Cloud | 第一章 :如何搭建一個多模塊的springcloud項目 來新建一個基本模塊結構

2. 修改pom.xml中引入依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>com.haly</groupId>
		<artifactId>springcloud</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<groupId>com.haly</groupId>
	<artifactId>springcloud-config-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springcloud-config-server</name>
	<description>新建一個config server項目</description>

	<dependencies>
		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
      	<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
	
</project>

3. 新建入口啟動類SpringcloudConfigServerApplication

@EnableConfigServer,表示開啟Config Server

package com.haly;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.config.server.EnableConfigServer;

@EnableConfigServer
@SpringBootApplication
@EnableDiscoveryClient
public class SpringcloudConfigServerApplication {
	  public static void main(String[] args) {
			SpringApplication.run(SpringcloudConfigServerApplication.class, args);
	    }

}

4. 修改application.properties文件(git方法存儲配置)

在Github上創建一個項目,並在上面添加配置文件config-client.properties,配置文件里添加一個屬性config=NewConfig !

application.properties中配置服務信息以及git信息

spring.application.name=springcloud-config-server
server.port=7001
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

spring.cloud.config.server.git.uri=https://github.com/FunriLy/springcloud-study/
spring.cloud.config.server.git.searchPaths=config-repo
spring.cloud.config.server.git.username=Username
spring.cloud.config.server.git.password=Password

啟動工程 Config Server,瀏覽器輸入:http://localhost:7001/config-client/default/master,得到結果如下

{
    "name": "config-client",
    "profiles": [
        "default"
    ],
    "label": null,
    "version": "52b88000fc46a8b1d72a2979f4721d45a3d1f429",
    "state": null,
    "propertySources": [
        {
            "name": "https://github.com/FunriLy/springcloud-study//config-repo/config-client.properties",
            "source": {
                "configword": "NewConfig !"
            }
        }
    ]
}

三、新建springcloud-config模塊(可不要):

其實我在工作中喜歡創建一個springcloud-config模塊,沒有業務代碼,只有pom.xml文件和resources目錄,resources放一下公共的配置文件,可以給其它模塊引用

例如配置:

spring-data-mysql.xml 文件

spring-data-redis-single.xml 文件

spring-jdbc-mysql.xml 文件

bootstrap.yml 配置文件

1. 新增pom.xml文件

<?xml version="1.0"?>
<project
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
        xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.sinaif</groupId>
        <artifactId>sinaif-weibo-opt</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <groupId>com.sinaif</groupId>
    <artifactId>sinaif-config</artifactId>
    <name>${project.artifactId}</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

2. 新增bootstrap.yml文件(可以統一配置config,eureka ,hystrix等待)

注意這里是bootstrap.properties而不是appliction.properties因為bootstrap.properties會在應用啟動之前讀取,而spring.cloud.config.uri會影響應用啟動

spring:
    cloud:
        config:
            name: config-client
            profile: default
            label: master
            uri: http://localhost:7001/
            
eureka:
    client:
        serviceUrl:
            defaultZone: http://localhost:8761/eureka/
    

上面配置config屬性的規則,以及前面我們直接用 http://localhost:7001/config-client/default/master 訪問配置的規則

URL與配置文件的映射關系

  • /{application}/{profile}[/{label}]
  • /{application}-{profile}.yml
  • /{label}/{application}-{profile}.yml
  • /{application}-{profile}.properties
  • /{label}/{application}-{profile}.properties

application是config-client-dev.properties文件中的config-client值,profile是一個active的profile,一般用來表示環境信息,label是一個可選的標簽,一般用來表示目錄名稱。
比如,我在Github上的文件名是config-client.properties,在Github上都是default環境,默認為master分支。所以就是/config-client/default/master

四、新建springcloud-config-server 的client模塊:

我用之前寫過的springcloud-feign-client模塊,在FeignController類里增加一個/testconfig方法充當Client端,springcloud-feign-client模塊內容參考:一起來學Spring Cloud | 第四章:服務消費者 ( Feign )

1. 在pom.xml文件中,增加上面新建的模塊的依賴包,這樣我們就能使用springcloud-config模塊中的eureka和config配置

 <dependency>
            <groupId>com.haly</groupId>
            <artifactId>springcloud-config</artifactId>
            <version>0.0.1-SNAPSHOT</version>
  </dependency>

2. 在FeignController類中增加一個測試方法

@Value("${configword}")
String configword;

@GetMapping(value = "/testconfig") public String testconfig(@RequestParam String name) {
return name +",git配置值:" + configword ;

}

3.  啟動服務,進行測試

依次啟動springcloud-eureka-server模塊,啟動springcloud-config-server模塊,啟動springcloud-feign-client模塊

訪問:http://localhost:9600/testconfig?name=young碼農,返回結果 :

young碼農,git配置值:NewConfig !

五、使用本地配置獲取配置項:

1. 修改springcloud-config-server模塊中的application.properties配置如下 

spring.application.name=springcloud-config-server
server.port=7001
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

# 表示使用本地config配置
spring.profiles.active=native
# 表示本地配置讀取的目錄文件位置
spring.cloud.config.server.native.searchLocations: classpath:/config/

2. 在springcloud-config-server模塊resources目錄下新建一個config文件,在config文件下新建2個配置文件,配置項內容如下:

configs-dev.properties:configword: dev-configword

configs-test.properties:configword: test-configword

3. 修改springcloud-config模塊的bootstrap.yml配置文件的config配置

ps: 目前我們設置的profile為dev,所以會從configs-dev.properties配置文件中讀取數據

spring:
    cloud:
        config:
            name: configs
            profile: dev
            label: config
            uri: http://localhost:7001/
            
eureka:
    client:
        serviceUrl:
            defaultZone: http://localhost:8761/eureka/

4. 啟動服務,運行結果

依次啟動springcloud-eureka-server模塊,啟動springcloud-config-server模塊,啟動springcloud-feign-client模塊

先訪問config-server,瀏覽器輸入:http://localhost:7001/configs/dev/config

{
    "name": "configs",
    "profiles": [
        "dev"
    ],
    "label": "config",
    "version": null,
    "state": null,
    "propertySources": [
        {
            "name": "classpath:/config/configs-dev.properties",
            "source": {
                "configword": "dev-configword"
            }
        }
    ]
}

在訪問config-client,瀏覽器輸入:http://localhost:9600/testconfig?name=young碼農,返回結果如下:

young碼農,git配置值:dev-configword

5. 修改springcloud-config模塊的bootstrap.yml配置文件的profile屬性:

ps: 目前我們設置的profile為dev,所以會從configs-test.properties配置文件中讀取數據

spring:
    cloud:
        config:
            name: configs
            profile: test
            label: config
            uri: http://localhost:7001/        

6.  再次啟動服務,運行結果

依次啟動springcloud-eureka-server模塊,啟動springcloud-config-server模塊,啟動springcloud-feign-client模塊

先訪問config-server,瀏覽器輸入:http://localhost:7001/configs/dev/config

{
    "name": "configs",
    "profiles": [
        "test"
    ],
    "label": "config",
    "version": null,
    "state": null,
    "propertySources": [
        {
            "name": "classpath:/config/configs-test.properties",
            "source": {
                "configword": "test-configword"
            }
        }
    ]
}

在訪問config-client,瀏覽器輸入:http://localhost:9600/testconfig?name=young碼農,返回結果如下:

young碼農,git配置值:test-configword

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM