Spring Cloud Config介绍

  Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持。使用Config Server,您可以集中管理所有环境中应用程序的外部属性。客户端和服务器上的概念与Spring Environment和PropertySource抽象,因此它们非常适合Spring应用程序,但可以与以任何语言运行的任何应用程序一起使用。当应用程序从开发人员到测试人员进入生产过程进入生产过程时,您可以管理这些环境之间的配置,并确保应用程序具有它们迁移时所需的一切。服务器存储后端的默认实现使用git,因此它轻松支持带标签的配置环境版本,并且可以通过各种工具来访问这些内容来管理内容。添加替代实现并将其插入Spring配置很容易。

  优点:

  1、Spring Cloud Config Server功能:

  2、HTTP,用于外部配置的基于资源的API(名称-值对,或等效的YAML内容)

  3、加密和解密属性值(对称或非对称)

  4、可轻松地使用Spring Boot应用程序嵌入 @EnableConfigServer

  5、Config Client功能(用于Spring应用程序):

  6、绑定到Config Server并Environment使用远程属性源初始化Spring

  7、加密和解密属性值(对称或非对称)

  Spring Cloud Config用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持。

  • 服务端:分布式配置中心,独立的微服务应用,用来连接配置仓库(GIT)并为客户端提供获取配置信息、加密/解密等访问接口。
  • 客户端:微服务架构中各个微服务应用和基础设施,通过指定配置中心管理应用资源与业务相关的配置内容,启动时从配置中心获取和加载配置信息

Spring Cloud Config架构图

  

SpringCloudConfig可以单独使用吗_Cloud

Spring Cloud Config服务端搭建

  准备:

  准一个Eureka注册中心,搭建参考:【SpringCloud】快速入门(一)

  在Github上准备一个配置中心仓库,如下:

    

SpringCloudConfig可以单独使用吗_spring_02

    其中config-dev.yml的文件内容如下:

    

SpringCloudConfig可以单独使用吗_Cloud_03

  搭建:

  1、新建一个SpringCloud模块springcloud-config-center8888,作为配置中心

  2、在pom中,引入spring-cloud-config-server和spring-cloud-starter-netflix-eureka-client依赖

1 <!-- spring cloud config server-->
 2 <dependency>
 3     <groupId>org.springframework.cloud</groupId>
 4     <artifactId>spring-cloud-config-server</artifactId>
 5 </dependency>
 6 
 7 <!-- eureka client -->
 8 <dependency>
 9     <groupId>org.springframework.cloud</groupId>
10     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
11 </dependency>

    完整pom文件如下:

SpringCloudConfig可以单独使用吗_Cloud_04

SpringCloudConfig可以单独使用吗_git_05

1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5     <parent>
 6         <artifactId>test-springcloud</artifactId>
 7         <groupId>com.test</groupId>
 8         <version>1.0-SNAPSHOT</version>
 9     </parent>
10     <modelVersion>4.0.0</modelVersion>
11 
12     <artifactId>springcloud-config-center8888</artifactId>
13 
14     <dependencies>
15 
16         <!-- spring cloud config server-->
17         <dependency>
18             <groupId>org.springframework.cloud</groupId>
19             <artifactId>spring-cloud-config-server</artifactId>
20         </dependency>
21 
22         <!-- eureka client -->
23         <dependency>
24             <groupId>org.springframework.cloud</groupId>
25             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
26         </dependency>
27 
28         <!-- spring boot -->
29         <dependency>
30             <groupId>org.springframework.boot</groupId>
31             <artifactId>spring-boot-starter-web</artifactId>
32         </dependency>
33         <dependency>
34             <groupId>org.springframework.boot</groupId>
35             <artifactId>spring-boot-starter-actuator</artifactId>
36         </dependency>
37         <dependency>
38             <groupId>org.springframework.boot</groupId>
39             <artifactId>spring-boot-devtools</artifactId>
40             <scope>runtime</scope>
41             <optional>true</optional>
42         </dependency>
43         <dependency>
44             <groupId>org.projectlombok</groupId>
45             <artifactId>lombok</artifactId>
46             <optional>true</optional>
47         </dependency>
48         <dependency>
49             <groupId>org.springframework.boot</groupId>
50             <artifactId>spring-boot-starter-test</artifactId>
51             <scope>test</scope>
52         </dependency>
53 
54     </dependencies>
55 </project>

pom.xml

  3、编辑application.yml配置文件

1 # 端口
 2 server:
 3   port: 8888
 4 
 5 spring:
 6   application:
 7     name: cloud-config-conter
 8   cloud:
 9     config:
10       server:
11         git:
12           # git仓库地址
13           uri: https://github.com/xxxx/springcloud-config.git
14           username: xxxx
15           password: 123456
16           # 跳过SSL的验证
17           skipSslValidation: true
18           # 查找路径,默认在根路径下,以下写法表示在更目录下以及folder目录下查找文件
19           searchPaths: folder
20 
21 eureka:
22   client:
23     service-url:
24       defaultZone: http://localhost:8761/eureka

  4、编辑主启动类,并使用@EnableConfigServer激活配置中心服务端

1 // 激活配置中心
2 @EnableConfigServer
3 @SpringBootApplication
4 public class ConfigCenterMain8888 {
5     public static void main(String[] args) {
6         SpringApplication.run(ConfigCenterMain8888.class, args);
7     }
8 }

   5、测试

    1)启动测试中心模块

    2)访问地址:http://localhost:8888/config-dev.yml,正常获取到git仓库中的文件

      

SpringCloudConfig可以单独使用吗_Cloud_06

    3)查看控制台,可以看到文件所在目录

      

SpringCloudConfig可以单独使用吗_Cloud_07

    4)进入文件所在目录,使用命令:git branch -a,可以发现目录即是本地git仓库目录(对于上面Spring Cloud Config架构图本地仓库)

      

SpringCloudConfig可以单独使用吗_spring_08

    5)修改远程git仓库,github上的config-dev.yml文件的内容,改为:

config:
  info: this is master branch, config-dev.yml, version == 2

    6)刷新访问地址:http://localhost:8888/config-dev.yml,查看显示内容

      发现,显示的内容也跟着更新了

      

SpringCloudConfig可以单独使用吗_git_09

Spring Cloud Config配置及其他

  1、配置读取规则:

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

    比如可以访问地址:

    a、查看test分支上的config-dev.yml文件信息:http://localhost:8888/config/dev/test

    b、获取默认(master)分支上的config-dev.yml文件:http://localhost:8888/config-dev.yml

    c、获取dev分支上的config-dev.yml文件:http://localhost:8888/dev/config-dev.yml

  2、项目application.yml中配置的git属性(searchPaths)

    查找路径,默认在根路径下,以下写法表示在更目录下以及folder目录下查找文件

    可以在更目录下建一个folder文件夹,然后在folder文件夹建一个config-test.yml文件

    访问地址:http://localhost:8888/master/config-test.yml,查看文件事,自动到根路径和folder目录下查找

  3、本地仓库目录设置:

    spring.cloud.config.server.git.basedir = /Users/h__d/Documents/git-repository/springcloud-config

  4、本地模式-设置本地目录作为文件读取目录,编辑配置文件,配置(删除其中git仓库配置)如下:

1 spring:
 2   application:
 3     name: cloud-config-conter
 4   profiles:
 5     # 告诉服务,我现在要启用本地配置(优先考虑采用工程目录resources下配置)
 6     active: native
 7   cloud:
 8     config:
 9       server:
10         native:
11           # 搜索配置文件的位置。默认与Spring Boot应用相同,
12           # [classpath:/,classpath:/ config /,file:./,file:./ config /]。
13           search-locations: /Users/h__d/Documents/git-repository/springcloud-config2

    测试:

      1)重启服务

      2)springcloud-config2目录中,内容如下:

        

SpringCloudConfig可以单独使用吗_spring_10

      3)访问地址:http://localhost:8888/config-dev.yml,正常访问并获取内容,说明一样能访问到springcloud-config2目录下的内容

  5、混合模式-设置本地目录作为文件读取目录,编辑配置文件,配置(删除其中git仓库配置)如下

1 spring:
 2   application:
 3     name: cloud-config-conter
 4   profiles:
 5     # 混合模式
 6     active: composite
 7   cloud:
 8     config:
 9       server:
10         composite:
11           - type: native
12             search-locations: /Users/h__d/Documents/git-repository/springcloud-config2
13         # 指示配置服务器应使用远程存储库中的属性初始化其自己的环境的标志。默认情况下处于关闭状态,
14         # 因为它会延迟启动,但是在将服务器嵌入另一个应用程序时很有用。
15         bootstrap: true

    测试:

      1)重启服务

      2)访问地址:http://localhost:8888/config-dev.yml,正常访问并获取内容,说明一样能访问到springcloud-config2目录下的内容