• spring cloud config客户端


    上篇介绍了spring cloud config服务器,本篇介绍客户端。客户端主要是从config服务器获取配置信息。

    代码示例

    首先创建一个Maven项目,在pom.xml文件中添加依赖:

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

    增加一个Controller,用于测试请求:

    @RestController
    public class IndexController {
    
        @Value("${profile}")
        private String profile;
    
        @RequestMapping("/profile")
        public String getProfile() {
            return profile;
        }
    
    }

    配置文件:bootstrap.yml

    spring:
      application:
        name: config-client
      cloud:
        config:
          uri: http://localhost:18083  #更改配置服务器的位置,默认地址是http://localhost:8888
          profile: test   #对应spring.profiles.active
          label: master   #分支名。当配置服务器是git时,默认是master

    配置文件:application.yml

    server:
      port: 18084

    启动服务,可以看到会请求http://localhost:18083,即从config server获取配置信息。也会打印出environment对象的值,即name(项目名称)、profiles(环境名称)、label(分支名称)。如下所示:

    测试工作:

    请求路径:http://localhost:18084/profile,测试结果:

     

    如果要获取config-client-dev.yml文件中的内容,只需要改spring.cloud.config.profile: dev就行

    配置内容的热加载:

    如果不重启应用,能够做到配置的刷新吗?答案显然是可以的。

    1、增加actuator依赖,暴露/refresh端点:

            <dependency>
                <!-- 监控管理(如:状态页和健康指标) -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>

    2、在上面的IndexController中增加@RefreshScope注解:

    @RestController
    @RefreshScope // 这边的@RefreshScope注解不能少,否则即使调用/refresh,配置也不会刷新
    public class IndexController {
    
        @Value("${profile}")
        private String profile;
    
        @RequestMapping("/profile")
        public String getProfile() {
            return profile;
        }
    
    }

    3、我们将config-client-test.yml中值改为

    profile: abcd

    并提交到git仓库

    4、使用Postman(也可以使用其它工具)请求:

    POST http://localhost:18084/refresh

    请求结果是:

    [
        "config.client.version",
        "profile"
    ]

    最后再次访问http://localhost:18084/profile,将会看到返回值是 abcd,说明配置已刷新。配置自动刷新可参考:使用spring cloud bus自动刷新配置

    遇到的坑:如果spring cloud使用的版本是 Edgware 以及之前,需要关掉actuator安全,把 manage.security.enabled 设为false

    总结

    1、spring cloud配置加载顺序: 加载bootstrap.* 配置 -->  连接config-server,加载远程配置 --> 加载application.* 配置

    2、远程配置优先级高于本地配置,application.*会覆盖bootstrap.*中的配置

    3、如果在远程配置中找不到匹配配置文件,则默认找远程的application.*文件

    4、如果config客户端不配置项目名称,则会使用默认的项目名称(即application),也会查找远程的application.*文件

    5、一般将不太会改变的配置放在bootstrap.*文件中,如spring.application.name

  • 相关阅读:
    Python基础(三)
    离线部署k8s集群
    linux安装python3
    vue elementui table 内按钮跳转页面
    js 正则表达式 验证数字或字母
    ps2020 将图片中的字清除 并且不损坏背景图
    css 背景图片铺满
    ps 缩放快捷键
    css 字体阴影和边框阴影
    ps 修改图片图层大小
  • 原文地址:https://www.cnblogs.com/xuwenjin/p/10472177.html
Copyright © 2020-2023  润新知