一、SpringCloud Config

上篇文章中我们介绍了Spring cloud GateWay网关的使用,包括路由转发、服务降级、限流等,所有的配制都配制在了项目中的 application.yml 文件中,如果其中修改配制文件就要进行重启,如果生产获取怎么可能随便重启呢,此时就需要分布式配制中心来统一管理我们的配制信息了。

上篇文章的地址:https://blog.csdn.net/qq_43692950/article/details/122023920

SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。

SpringCloud Config分为服务端和客户端两部分。

服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口

客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容。

在这里插入图片描述

二、搭建git仓库

SpringCloud Config 默认使用 GIT来管理配制文件也可以使用 SVN,本文我们使用GIT来做演示,是要使用的阿里的 码云 gitee 仓库。

在gitee 中新建仓库:
在这里插入图片描述
上面我的仓库叫 cloud-config ,创建好后,我们可以git clone 拉取下来,创建application目录,并在其中创建 application-consumer.yml 写入以下内容:

param: 
  text: abc14
  name: 测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到此 git 上的仓库和配制文件我们就已经准备好了。

三、SpringCloud Config 服务端搭建

还是和前面文章一样,新建一个springboot的module,加入config-server的依赖:

SpringCloud 我们使用的时H版的SR9版本

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-config-server</artifactId>
 </dependency>
 <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.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>

配制文件修改:

server:
  port: 8070

spring:
  application:
    name:  config-center
  cloud:
    config:
      server:
        git:
#          uri: git@gitee.com:app94/cloud-config.git #GitHub上面的git仓库名字
          uri: https://gitee.com/app94/cloud-config.git #GitHub上面的git仓库名字
          username: ${username}
          password: ${password}
          ####搜索目录
          search-paths:
            - application
      ####读取分支
      label: master


eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://eureka1:8010/eureka,http://eureka2:8011/eureka

注意上面username和password 换成你码云中的用户名密码。

主启动类:

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

启动config server端项目

四、SpringCloud client 客户端搭建

创建一个config client端的springboot的 module,加入下面依赖:

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

 <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.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>

配制文件修改,注意下面内容要写在bootstrap.yml中,在服务前就读取配制。
在这里插入图片描述

server:
  port: 8081

spring:
  application:
    name: config-client
  cloud:
    #Config客户端配置
    config:
      label: master #分支名称
      name: application #配置文件名称
      profile: consumer #读取后缀名称   上述3个综合:master分支上application -consumer.yml的配置文件被读取
#      uri: http://localhost:8070 #配置中心地址k
      discovery:
        enabled: true
        service-id: CONFIG-CENTER

eureka:
  client:
    register-with-eureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://eureka1:8010/eureka,http://eureka2:8011/eureka


management:
  endpoint:
    shutdown:
      enabled: false
  endpoints:
    web:
      exposure:
        include: "*"

上面可以通过uri 指定配制中心的地址,也可以使用 service-id 在注册中心中找配制中心。

主启动类:

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

编写Properties

@Component
@ConfigurationProperties(prefix = "param")
@Data
public class ParamProperties {
    private String text;
    private String name;
}

编写测试接口:

@RestController
@RequestMapping("config")
public class ConfigController {

    @Autowired
    ParamProperties paramProperties;

    @GetMapping("/getConfig")
    public ResponseTemplate getConfig() {
        log.info("text: {}", paramProperties.getText());
        log.info("name: {}", paramProperties.getName());
        return ResSuccessTemplate.builder().build();
    }
}

下面启动client端,调用接口进行测试,浏览器输入http://localhost:8081/config/getConfig
在这里插入图片描述
已经读取到我们配制中心的内容,如果此时修改git上配制的信息,在请求接口呢:
在这里插入图片描述
再次调用接口,查看日志:
在这里插入图片描述
发现并没有刷新,下面我们说下如何刷新配制内容。

五、刷新配制内容

上面我们已经看到效果,在git中修改的内容,并不会反映到项目中,那这样配制中心岂不是很鸡肋,当然不是,我们只需修改下程序写法,和调用一个接口即可:

修改Properties,添加:@RefreshScope 注解

@Component
@ConfigurationProperties(prefix = "param")
@Data
@RefreshScope
public class ParamProperties {
    private String text;
    private String name;
}

重启项目,调用接口,查看打印日志:
在这里插入图片描述
我们刚才修改的内容已经读取出来了,下面我们修改git上的内容:
在这里插入图片描述
使用 PostMan 发送 post请求至:http://localhost:8081/actuator/refresh ,就是请求的config client 端的/actuator/refresh
在这里插入图片描述

如果请求不同,查看配制文件中是否加入以下配制:
在这里插入图片描述
再次访问上面的测试接口,查看参数是否变化:
在这里插入图片描述
参数已经变为最新的内容了,并且我们也没有重启客户端,实现在在线修改配制的功能。

在这里插入图片描述
喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐