Springcloud配置中心之Spring Cloud Config

介绍

Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此数据初始化自己的应用。Spring cloud使用git或svn存放配置文件,默认情况下使用git。

Spring Cloud Config主要功能:

  • 集中管理各环境、各个服务的配置文件
  • 提供服务端和客户端支持
  • 配置文件修改后,可以快速生效
  • 配置文件通过git/svn进行管理,天然支持版本回退功能
  • 支持高并发查询,也支持各种开发语言

接下来以git为例做一个示例。

git示例

准备

github创建一个名为configRepoTest的仓库。将准备的文件上传到仓库,文件内容看仓库(https://github.com/xiaoxiaoshou/configRepoTest)。

server端

创建一个springboot项目。

1.依赖
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-config-server</artifactId>
</dependency>
2.启动类添加注解
@SpringBootApplication
@EnableConfigServer
public class ConfigserverApplication {

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

}
3.配置文件application.yml
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/xiaoxiaoshou/configRepoTest
          search-paths: client1 # 仓库中配置文件的目录
          username: github用户名
          password: github密码
server:
  port: 8081

search-paths对应的值也可以用占位符配置search-paths: {application}

4.启动测试

输入http://localhost:8081/config-server/dev获取dev配置信息。如果直接查看dev配置文件中的配置信息可访问http://localhost:8081/client1-dev.properties
实际上访问地址如下规则:

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

application表示配置文件名
profile表示配置文件profile,例如test、dev、prod
label表示git分支,参数可选默认就是master

Client端

1.依赖
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
2.配置文件
  • application.yml
spring:
  application:
    name: config-client
server:
  port: 8082

  • bootstrap.yml
spring:
  cloud:
    config:
      name: client1
      profile: dev
      label: master
      uri: http://localhost:8081

注意:上面这些与Springcloud相关的属性必须配置在bootstrap.yml,config部分内容才能被正确加载。因为config的相关配置会先于application.yml,而bootstrap.yml的加载也是先于application.properties。

3.控制层提供测试接口
@RestController
public class HelloController {

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

    @GetMapping("/hello")
    public String hello(){
        return this.pikachues;
    }
}

注意上面配置的pikachues这个名称是github上配置的key名称,如果不是启动会报错。
启动项目访问:http://localhost:8082/hello即可看到你github上配置key对应的值,我这里是返回dev。

扩展

虽然在实际开发中,配置文件一般都是放在git仓库中,但是,Config-server也支持将文件放在classpath下。
配置文件添加如下配置即可实现:

spring:
  profiles:
    active: native  # 表示让config-server从classpath下查找配置,而不是去github查找
  cloud:
    config:
      server:
        native:
          search-locations: file:/E:/properties/ # 指定配置文件的位置

动态刷新

在上面git示例中你会发现,当github中的配置文件发生变化时,server端获取的是最新的信息,而client端获取的是旧的配置信息,也就是说server端可以及时感知到配置信息的变化,而client不能及时感知到配置文件的变化。默认情况下client端只有重启才能加载到最新的配置文件。要实现动态刷新步骤如下:

1.添加依赖
 <dependency>
 	  <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.application.yml中添加如下配置,使refresh端点暴露出来
management:
  endpoints:
    web:
      exposure:
        include: refresh
3.在client端使用了配置文件的地方加上@RefreshScope注解

加上注解后,当配置文件改变后只要调用refresh端点,client端中的配置就可以刷新。

@RestController
@RefreshScope
public class HelloController {

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

    @GetMapping("/hello")
    public String hello(){
        return this.pikachues;
    }
}

配置成功后重启client端,以后只要配置文件发生变化,发送post请求调用http://localhost:8082/actuator/refresh接口配置文件就会自动刷新。

请求失败重试

client端在调用server端时,可能发生调用失败的情况,那么我们可以配置一个请求重试的功能。

1.添加依赖
 <dependency>
 	 <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-aop</artifactId>
 </dependency>
 <dependency>
     <groupId>org.springframework.retry</groupId>
     <artifactId>spring-retry</artifactId>
 </dependency>
2.配置文件
spring:
  cloud:
    config:
      # 开启快速响应(主要)
      fail-fast: true
      retry:
        # 请求重试的初始间隔时间
        initial-interval: 1000
        # 最大重试次数
        max-attempts: 6
        # 重试时间间隔
        multiplier: 1.1
        # 最大间隔时间
        max-interval: 2000

配置完成后重启,以上配置完成后即可实现请求失败重试。

项目地址

github

原创文章 139 获赞 52 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_41262903/article/details/105348815