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

spring cloud config笔记

壤驷旭
2023-12-01

spring cloud config

官网的spring cloud config文档:Spring Cloud Config

server端

server端主要读取远程源的配置信息到本地,然后给后台微服务提供统一的配置中心。

pom.xml

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-server -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

主启动类

使用spring cloud config server需要在主启动类中配置@EnableConfigServer注解,以确保开启configServer的配置。

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

application.yml

需要在application.yml配置文件中配置git的远程仓库地址。配置后,spring cloud config server将会和远程仓库的文件进行信息的同步。

server:
  port: 9001

spring:
  application:
    name: cloud-config9001
  cloud:
    config:
      server:
        git:
          uri: xxx.git         #仓库地址
          search-paths: springcloud-config #扫描路径
      label: master

除了github仓库以外,spring cloud config server还支持重其他源读取配置信息,如AWS的S3

spring:
  profiles:
    active: awss3
  cloud:
    config:
      server:
        awss3:
          region: us-east-1
          bucket: bucket1

资源路径

配置好并启动好spring cloud config项目后,我们就可以通过以下资源路径来获取配置信息啦。其中:

label 分支

application 配置名(一般为微服务应用名)

profile 配置概述(如:dev)

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

官方示例:

curl localhost:8888/foo/development
curl localhost:8888/foo/development/master
curl localhost:8888/foo/development,db/master
curl localhost:8888/foo-development.yml
curl localhost:8888/foo-db.properties
curl localhost:8888/master/foo-db.properties

client端

pom.xml

maven依赖导入:

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

加载优先级

加载文件优先级如下:

  • application.yml 用户级的资源配置
  • bootstrap.yml 系统级,优先级高

先加载优先级高的bootstrap.yml配置,然后再加载优先级第的application.yml,并且优先级高的配置会覆盖优先级低的,也就是说bootstrap.yml先于application.yml(bootstrap.yml和application.yml都有的配置,就选择bootstrap.yml的配置)

bootstrap.yml配置

为了确保微服务自身的配置优先级高于公共配置信息(本地仓库的公共配置或远程的公共配置),所以微服务自身的配置文件我们命名为bootstrap.yml。

spring:
  application:
    name: cloud-config-client
  cloud:
    config:
      label: master     #分支
      name: config      #配置名
      profile: dev      #信息后缀(对应上面的profile)
      uri: http://localhost:9001   #配置中心

动态刷新配置

server端的配置来github等其他源,是属于直接获取的,server端的配置能动态刷新,但是其他config client端想要动态刷新配置,必须在bootstrap.yml添加另外一些配置信息,并且需要添加一些maven依赖。

maven依赖

监控器依赖

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

暴露监控端点

management:
  endpoints:
    web:
      exposure:
        include: *

通过网络接口发起post请求刷新

http://localhost:8888/actuator/refresh 发起post请求,以刷新微服务的配置信息。

@RefreshScope注解

有时后你的代码用会用到一些配置文件的信息,如:一些自定义的bean通过@value注入application.yml中的某些值,或者通过@ConfigurationProperties映射到application.yml中的某些自定义配置项。

这些信息可以通过@RefreshScope来解决动态跟新的配置信息,如下代码中,那么我myconfigbeans就可以通过@RefreshScope以刷新注入到自定义bean中的值。

@Component
@RefreshScope  //使得每次获取bean都是得到配置文件中的最新值
public class myconfigbeans {
    @Value("${configbeans.user}")  //配置文件中的configbeans.user=“YAO”
    String user;
}

广播刷新配置

要使用广播以刷新配置,就要配合spring cloud bus使用,spring cloud bus和spring cloud Stream息息相关。

Stream通过对消息中间件进行抽象封装,提供一个统一的接口供我们发送和监听消息,而Bus则是在Stream基础之上再次进行抽象封装,使得我们可以在不用理解消息发送、监听等概念的基础上使用消息来完成业务逻辑的处理。

 类似资料: