SpringCloud(10)使用SpringCloud Config配置中心

0.什么是SpringCloud Config

在微服务架构中,有一堆各种微服务,粒度很细,如果一个一个的进行配置application.yml,那么工程量是非常巨大的,springcloud config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个集中的外部配置

1.配置Config的服务端

①创建一个github仓库,并创建配置文件上传到仓库

首先创建三个yml文件,然后右键git bash here,打开git控制台,并输入以下指令上传到git仓库

1.git init #git进行管理文件夹
2.git add . #添加所有文件
3.git commit -m "提交注释" #提交
4.git remote add origin 这里带上你的仓库地址 #绑定远程仓库
5.git push -u origin master #上传到仓库

在这里插入图片描述
上传完成
在这里插入图片描述

②新建Config服务端项目,并进行配置

添加web,eureka,config服务端的相关依赖。

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <dependency>
            <groupId>com.hht.cloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <!--eureka client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.2.4.RELEASE</version>
        </dependency>

        <!--config server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
            <version>2.2.4.RELEASE</version>
        </dependency>

然后配置项目的yml配置文件,需要指定git仓库相关配置。

spring:
  application:
    name: cloud-config-center
  cloud:
    config:
      server:
        git:
          uri: https://github.com/houhaotong/springcloud-config #github的仓库地址
          #搜索目录
          search-paths:
            - springcloud-config
          username: 你的账号
          password: 你的密码
      #读取分支
      label: master
eureka:
  instance:
    hostname: cloud-config-center
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/,http://eureka7002.com:7002/
server:
  port: 3344

接下来在主启动类上加入@EnableConfigServer注解

@SpringBootApplication
@EnableConfigServer
public class CloudConfigCenter3344Application {
    
    

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

}

然后开启项目,尝试查看仓库中的配置文件,下面是在git仓库中的config-dev.yml的内容,测试访问项目路径能否查看到。
在这里插入图片描述
输入网址 项目地址+端口+分支名+需要访问的文件名,如:http://localhost:3344/master/config-dev.yml,可以看到成功查看到了git仓库中的配置文件内容。
在这里插入图片描述

2.配置Config的客户端

①配置客户端项目,并进行测试

新建一个client项目,将服务端的依赖改为客户端的依赖。

	<!--config-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-client</artifactId>
            <version>2.2.4.RELEASE</version>
        </dependency>

在客户端项目中,我们将application.yml改名为bootstrap.yml

什么是bootstrap.yml?

Spring Cloud会创建一个boostrap context作为application.yml父级上下文,初始化时bootstrap.yml负责从外部源加载配置属性并解析配置,用这个配置文件来获取远程配置。

bootstrap.yml的优先级比application.yml优先级更高,会比application更先加载,bootstrap.yml相当于系统级

下面是项目的bootstrap.yml配置内容。

spring:
  application:
    name: cloud-config-client
  cloud:
    config:
      #读取分支
      label: master
      #文件名
      name: config
      #文件的后缀名字
      profile: dev #这样配置就代表,从uri中调用master分支中的叫做config-dev的文件
      #config服务端的地址
      uri: http://localhost:3344

eureka:
  instance:
    hostname: cloud-config-client
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
server:
  port: 3355

现在已经配置好了配置文件,会从git仓库中读取config-dev.yml的内容,接下来新建一个controller,并写一个方法来读取从config-dev.yml中读取的内容。下面是在git仓库中的config-dev.yml文件内容。
在这里插入图片描述
下面是用于测试读取的controller。

@RestController
@RequestMapping("/config")
public class ConfigClientController {
    
    

    @Value("${config.info}")
    private String info;
    
    @GetMapping("/info")
    public String getInfo(){
    
        
        return info;
    }
}

接下来开启服务端和客户端进行测试。
在这里插入图片描述
可以看到能够从配置文件中获取到git仓库里的配置。

②配置动态刷新手动版

如果我们修改了git仓库上的配置文件内容,那么客户端和服务端获取到的内容会不会随着刷新?接下来进行测试一波,修改git仓库的文件version=2,然后在3344端口的服务端进行查看。

可以看到,在3344的Config服务端上,会获取到最新的。
在这里插入图片描述
接下来访问3355的客户端,发现没有刷新,依旧是version=1。
在这里插入图片描述
鉴于这种情况,我们不能每次都重新启动项目来刷新,所以接下来就需要配置动态刷新。

首先,需要导入actuator监控的依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

接下来,在配置文件中配置暴露监控断点

#暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: "*"

然后在controller类上加入@RefreshScope注解
在这里插入图片描述
然后开启项目之后,修改git中的文件内容为version=3,修改完之后,这时候访问仍然是老的,依旧没有刷新,这时候需要我们向http://localhost:3355/actuator/refresh发送POST请求,来进行一波手动刷新。
在这里插入图片描述
接下来再次在客户端查看远程配置,发现已经更新了。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41120971/article/details/108212331