目录

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. scrcpy软件的使用

    一.scrcpy软件介绍: scrcpy是通过adb调试的方式来将手机屏幕投到电脑上,并可以通过电脑控制您的Android设备.它可以通过USB连接,也可以通过Wifi连接(类似于隔空投屏),而且不需 ...

  2. 【LeetCode2180】[Go/C++/C#/Ruby/Swift/Kotlin/Rust/PHP/TS/Racket/Dart/Java/Elixir/Scala/Erlang] 统计各位数字之和为偶数的整数个数

    目录 题解地址 代码 golang c++ C# ruby swift kotlin rust php typescript racket dart java elixir scala erlang ...

  3. Redis 线程模型

    一.概述 [1]Redis 是基于 Reactor 模式开发的网络事件处理器:这个处理器被称为文件事件处理器(file event handler),这个文件事件处理器是单线程的,所以 Redis 才 ...

  4. Windows系统下Dos命令记录

    # 切换到F:\test\目录 /d 参数可以直接切换,不需要先切换盘符 cd /d F:\test\ # 创建文件夹test md tset # 删除文件夹test rd test # 创建文件te ...

  5. 对一些常用RDD算子的总结

    虽然目前逐渐sql化,但是掌握 RDD 常用算子是做好 Spark 应用开发的基础,而数据转换类算子则是基础中的基础,因此学习这些算子还是很有必要的. 这篇博客主要参考Spark官方文档中RDD编程一 ...

  6. NodeJS V8引擎的内存和垃圾回收器(GC)

    一.为什么需要GC 程序应用运行需要使用内存,其中内存的两个分区是我们常常会讨论的概念:栈区和堆区. 栈区是线性的队列,随着函数运行结束自动释放的,而堆区是自由的动态内存空间.堆内存是手动分配释放或者 ...

  7. 【入门排坑】Windows之间使用OpenSSH的ssh免密登录,排坑

    安装 安装OpenSSH 需要安装OpenSSH客户端和服务器,win10自带客户端,我们安装服务器即可. 设置 -- 应用 -- 可选功能 -- 添加 -- 添加 OpenSSH 服务器 配置 公钥 ...

  8. [PKM] 家庭数据中心

    1 NAS(Network Attached Storage/网络附属存储) 1.1 NAS的定义 NAS(Network Attached Storage:网络附属存储):具备资料存储功能的装置.按 ...

  9. Hugging News #0407: Google AI 的 Pix2Struct 来啦、开发者资源页面发布

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  10. day93:flask:Cookie&Session&请求钩子&捕获错误&上下文&Flask-Script

    目录 1.HTTP的会话控制 2.Cookie 3.Session 4.请求钩子 5.捕获错误 6.上下文:context 7.Flask-Script 1.HTTP的会话控制 1.什么是会话控制? ...