当前位置: 首页 > 工具软件 > yao-config > 使用案例 >

【spring cloud】Config 分布式配置中心的介绍与使用

岳茂
2023-12-01

参考了尚硅谷的spring cloud课程,做了一些笔记,完整代码:https://github.com/yao09605/mscloud

Config解决的问题

  1. 将配置独立于程序包,作为单独的库,可以随时更新,而不是打包整个程序包到生产上。(在企业里面打包程序上生产是要走很多流程的)
  2. 可以管理多个版本的配置文件,比如prod生产环境,dev开发环境,test测试环境等等
  3. 应用不需要重启,通过暴露接口的方式实现配置的实时刷新

准备工作

准备一个github仓库作为存放配置文件的地方

Config的约定

远程的config文件使用官网约定的命名方式
有以下几种约定的文件格式:

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

其中:
application对应spring.config.name (应用名)
profile对应环境名spring.config.profile (环境名)
label对应spring.config.label (github分支)

举个例子:
我们上传一个config-dev.yml到github上的master分支上
读取这个配置的应用应该有如下配置:

spring:
  application:
    name: config-client
  cloud:
    config:
      label: master
      name: config
      profile: dev
      uri: http://localhost:3344

Config Server端配置

新建一个module

修改pom

添加如下依赖

         <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-actuator</artifactId>
        </dependency>

修改application.yml

server:
  port: 3344
spring:
  application:
    name: cloud-config-center
  cloud:
    config:
      server:
        git:
          uri: https://github.com/yao09605/springcloud-config.git #库地址
          search-paths:
            - springcloud-config
      label: master #分支
eureka: #服务注册中心
  client:
    service-url:
      defaultZone:  http://localhost:7001/eureka

添加启动类

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

启动3344应用

测试:http://localhost:3344/master/config-dev.yml

Config Client端配置

pom依赖

<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-actuator</artifactId>
        </dependency>

bootstrap.yml

bootstrap.yml优先级高于application.yml,所以这里用bootstrap,因为真正的配置在配置中心

server:
  port: 3355

spring:
  application:
    name: config-client
  cloud:
    config: #去哪里读配置,去配置中心读
      label: master
      name: config
      profile: dev
      uri: http://localhost:3344
eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka

management: #暴露端口用于实时刷新
  endpoints:
    web:
      exposure:
        include: "*"

主启动

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

测试类

@RefreshScope //用于刷新配置
@RestController
public class ConfigClientController {

    @Value("${config.info}") //注入远程配置文件中的字段,配置文件中没有这个字段的话就启动不起来了
    private String configInfo;

    @GetMapping("/configInfo")
    public String getConfigInfo(){
        return configInfo;
    }
}

测试

访问:http://localhost:3355/configInfo

实时更新

  1. 修改配置文件上传git
  2. curl -X POST “http://localhost:3355/actuator/refresh” 注意必须使用post方式刷新
  3. 访问:http://localhost:3355/configInfo 不需要重启服务
 类似资料: