目录

Spring Cloud Consul Config

Consul 通过 Key/Value 功能集中管理存储配置信息, 通过 Spring Cloud Consul Config 可以实现 Config Server 和 Client 的关联. 在 Spring 启动的 bootstrap 阶段, 配置会被载入环境上下文.

配置前缀, 路径和优先级

默认情况下, 配置的路径前缀是 /config , 不同的 application 和 profile 对应不同的配置路径, 例如对应应用 "testApp" 和 "dev" profile 的配置, 会涉及以下路径

config/testApp,dev/
config/testApp/
config/application,dev/
config/application/

这个列表从上往下分别对应的配置优先级从高到低, 优先级高的同样配置项会覆盖优先级低的配置项.

  • config/application/ 全局公共配置, 对应使用 config 前缀的所有应用
  • config/application,dev/ 全局dev公共配置, 对应使用 config 前缀的所有, 且启用 dev profile 的应用
  • config/testApp/ 对应使用 config 前缀的, 名称为 testApp 的应用
  • config/testApp,dev/ 对应使用 config 前缀的, 名称为 testApp, 且启用 dev profile 的应用

注意: 配置对应的 profile 和节点应用名是平级的, config/service-name,dev/data 这样, data 是配置的子项, 不要把 profile 加到 data 去了

在项目中启用 Consul Config

如果要使用 Consul 的分布式配置(Distributed Configuration), 需要添加 spring-cloud-starter-consul-config 的依赖

spring-cloud-starter-consul-discovery 不带 spring-cloud-starter-consul-config, 如果需要用 Consul Config, 需要单独添加依赖

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

也可以直接用 spring-cloud-starter-consul-all, 包含了 spring-cloud-starter-consul-discovery 和 spring-cloud-starter-consul-config

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

配置文件 application.yml

添加了 consul-config 依赖之后, 在 application.yml 就要增加对应的设置 spring.config.import = consul: 否则启动会报错,

Spring Boot 在 2.4 版本之后新增了这个项(spring.config.import property)用于导入配置, 并且是默认的配置方式.

# properties
spring.config.import=optional:consul:
# yaml
spring:
config:
import: 'consul:'

上面的配置, 如果启动时import失败会导致启动失败, 如果不强制 import, 可以加上 optional:

# properties
spring.config.import=optional:consul:
# yaml
spring:
config:
import: 'optional:consul:'

上面的这两个配置, 都会用默认的地址 http://localhost:8500 去请求 Consul 服务, 如果需要自定义地址, 可以通过配置spring.cloud.consul.hostspring.cloud.consul.port,

spring:
cloud:
consul:
host: 10.123.123.123
port: 8501

或者使用

spring.config.import=optional:consul:myhost:8500

对应以上配置, 在 Spring 启动的 bootstrap 阶段会通过 Consul 去获取 key = config/dummy-service/data 对应的 value (假定这个模块的 application.name = dummy-service),

对应value格式为 yaml, 需要增加配置

# yaml
spring:
cloud:
consul:
config:
format: YAML
prefix: config
data-key: data

其中

  • format: YAML 设置配置格式
  • prefix: config修改 config/dummy-service/data 的前缀
  • data-key: data修改 config/dummy-service/data 的后缀

默认的请求路径生成基于

  1. spring.cloud.consul.config.name , 值默认等于 spring.application.name
  2. spring.cloud.consul.config.default-context , 这个值默认等于 application
  3. spring.profiles.active , 可以在启动时通过 VM Option -Dspring.profiles.active=xxx 指定

如果不想用默认的, 想自己指定, 可以用如下的方式

# properties
spring.config.import=optional:consul:myhost:8500/config/custom/context/one;/config/custom/context/two

上面的设置将只从这两个Key/Value路径读取配置, 注意路径的对应关系, 在import中体现前缀 config, 但是不体现后缀 data

  • /config/custom/context/one/data
  • /config/custom/context/two/data

配置自动更新, Config Watch

Consul Config Watch 使用 consul 的路径前缀对配置更新进行检查, 当配置变化时会产生一个 Refresh Event, 等价于请求 /refresh actuator endpoint.

默认的检查频率为 1000 单位毫秒, 可以通过 spring.cloud.consul.config.watch.delay 配置

如果要禁用配置自动更新, 需要设置 spring.cloud.consul.config.watch.enabled=false

Consul 配置管理

通过 WEB 界面

默认为 http://127.0.0.1:8500 可以在 Key/Value 中直接添加, 记得格式要改为 YAML

通过命令行

读取

$ ./consul kv get foo
bar $ ./consul kv get config/application/data
cassandra:
host: 127.0.0.1:9042,127.0.0.2:9042
user: my_user
password: my_pass

使用文件data.yml中的内容, 直接写入

$  ./consul kv put config/application/data @data.yml
Success! Data written to: config/application/data
The data can be retrieved the same way,

使用配置

经过以上配置, 在项目中就可以通过 @Configuration 获取 Consul 中配置的信息

@Slf4j
@Configuration
public class CommonConfig {
@Value("${common.name}")
private String name = "Dummy";
@Value("${common.code}")
private String code = "001"; public String getName() {return name;}
public void setName(String name) {this.name = name;}
public String getCode() {return code;}
public void setCode(String code) {this.code = code;} @PostConstruct
public void postConstruct() {
log.info("name: {}", name);
log.info("code: {}", code);
}
}

参考

Spring Cloud开发实践(七): 集成Consul配置中心的更多相关文章

  1. Spring Boot实战系列(7)集成Consul配置中心

    本篇主要介绍了 Spring Boot 如何与 Consul 进行集成,Consul 只是服务注册的一种实现,还有其它的例如 Zookeeper.Etcd 等,服务注册发现在微服务架构中扮演这一个重要 ...

  2. Spring Cloud Config、Apollo、Nacos配置中心选型及对比

    Spring Cloud Config.Apollo.Nacos配置中心选型及对比 1.Nacos 1.1 Nacos主要提供以下四大功能 2.Spring Cloud Config 3.Apollo ...

  3. Python微服务实践-集成Consul配置中心

    A litmus test for whether an app has all config correctly factored out of the code is whether the co ...

  4. Spring Cloud开发实践 - 01 - 简介和根模块

    简介 使用Spring Boot的提升主要在于jar的打包形式给运维带来了很大的便利, 而Spring Cloud本身的优点不是那么明显, 相对于Dubbo而言, 可能体现在跨语言的交互性上(例如可以 ...

  5. Spring Cloud(十四)Config 配置中心与客户端的使用与详细

    前言 在上一篇 文章 中我们直接用了本应在本文中配置的Config Server,对Config也有了一个基本的认识,即 Spring Cloud Config 是一种用来动态获取Git.SVN.本地 ...

  6. Spring Cloud Alibaba 整合 Nacos 实现服务配置中心

    在之前的文章 <Nacos 本地单机版部署步骤和使用> 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能 一.Nacos 动态配置服务是什么? 官方是这么说 ...

  7. Spring Cloud开发实践 - 04 - Docker部署

    Docker的安装和命令可以参考 https://www.cnblogs.com/milton/p/9866963.html . 资源规划 这一步要区分传统资源和Docker资源, 为后面的细节定好基 ...

  8. Spring Cloud开发实践 - 02 - Eureka服务和接口定义

    服务注册 EurekaServer Eureka服务模块只有三个文件, 分别是pom.xml, application.yml 和 EurekaServerApplication.java, 内容如下 ...

  9. Spring Cloud开发实践 - 03 - 接口实现和下游调用

    接口实现 Scot Commons Impl 接口实现模块 scot-commons-impl, 一方面实现了 scot-commons-api 的接口, 一方面将自己暴露为 REST 服务. 有4个 ...

  10. Spring Cloud 微服务一:Consul注册中心

    Consul介绍 Consul is a service mesh solution providing a full featured control plane with service disc ...

随机推荐

  1. ArcMap将Python写的代码转为工具箱与自定义工具

      本文介绍在ArcMap软件中,通过已有的Python脚本程序,建立新的工具箱并在其中设置自定义工具的方法.   通过本文介绍的操作,我们便可以实现将自己的Python代码封装,并像其他ArcGIS ...

  2. 动态开点线段树&线段树合并学习笔记

    动态开点线段树 使用场景 \(4 \times n\) 开不下. 值域需要平移(有负数). 什么时候开点 显然,访问的节点不存在时(只会在修改递归时开点). trick 区间里面有负数时,\(mid ...

  3. 五月二十五日jdbc基础知识点

    Jdbc连接数据库1.建立与数据库的连接1.1导入jdbc包1.2加载JDBC驱动java.lang.Class.forName(JDBCDriverClass);Class.forName(driv ...

  4. 听说你想用免费的FOFA?(第二弹)

    听说你想用免费的FOFA?(第二弹) 上回说到 听说你想用免费的FOFA? 第二弹 记得那是一个阳光正好的午后,我刚更新了导出文件类型,到了晚上就发现fofa hack下载不了了,看了一下最新的规则, ...

  5. Java SpringBoot 中,动态执行 bean 对象中的方法

    根据不同的条件,调用不同的 bean 对象,执行对象中的方法 SpringUtils 工具类 package com.vipsoft.web.utils; import cn.hutool.core. ...

  6. Podman Desktop安装与使用-Windows10

    Podman Desktop安装与使用-Windows10 下载 containers/podman 地址 Podman Desktop Downloads 地址 我这里演示的是podman-v4.4 ...

  7. $.set() 处理非响应式案例

    <template> <div id="app"> <ul> <li v-for="item in list" :ke ...

  8. Docker Compose 部署 Jenkins

    Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具 Jenkins应用广泛,大多数互联网公司都采用Jenkins配合GitLab.Docker.K8s作为实现D ...

  9. .Net 6.0 部署Linux+Nginx +PM2教程

    今天带大家将本地.Net6.0项目部署到Linux系统中,其中有用到Nginx反向代理和PM2进程管理工具,希望本偏文章能对你有所帮助,成为你成功路上的垫脚石! 背景: 在.Net 5.0横空出世之后 ...

  10. 统计计算——Bootstrap总结整理

    Bootstrapping Boostrap 有放回的重抽样. 符号定义: 重复抽样的bootstrap \(F^*\) 观测到的样本\(\hat F\),是一个经验分布 真实分布\(F\) Eg. ...