Consul 提供了一个用于存储配置和其他元数据的键/值存储。Spring Cloud Consul Config 是 Config Server 和 Client 的替代方案。在特殊的“引导”阶段,配置被加载到Spring环境中。默认情况下,配置存储在文件夹中。根据应用程序的名称和活动配置文件创建多个实例,这些配置文件模拟 Spring Cloud Config 解析属性的顺序。例如,名称为“testApp”且配置文件为“dev”的应用程序将创建以下属性源:/configPropertySource

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

最具体的属性源位于顶部,最不具体的属性源位于底部。文件夹中的属性适用于使用 consul 进行配置的所有应用程序。文件夹中的属性仅适用于名为“testApp”的服务实例。config/applicationconfig/testApp

当前在应用程序启动时读取配置。发送 HTTP POST 将导致重新加载配置。Config Watch 还将自动检测更改并重新加载应用程序上下文。/refresh

如何激活

要开始使用 Consul Configuration,请使用带有 group 和 artifact id 的 starter。有关使用当前 Spring Cloud 发布系列设置构建系统的详细信息,请参阅 Spring Cloud 项目页面org.springframework.cloudspring-cloud-starter-consul-config

Spring Boot 配置数据导入

Spring Boot 2.4 引入了一种通过属性导入配置数据的新方法。现在,这是从 Consul 获取配置的默认方式。spring.config.import

若要选择性地连接到 Consul,请在 application.properties 中设置以下内容:

application.properties
spring.config.import=optional:consul:

这将连接到默认位置“http://localhost:8500”的领事代理。如果 Consul Config 无法连接到 Consul,则删除前缀将导致 Consul Config 失败。要更改 Consul Config 的连接属性,请设置和/或将主机/端口对添加到语句中,例如 .import 属性中的位置优先于主机和端口属性。optional:spring.cloud.consul.hostspring.cloud.consul.portspring.config.importspring.config.import=optional:consul:myhost:8500

Consul Config 将尝试根据 (默认为属性值) 和 (默认为 ) 从四个自动上下文中加载值。如果要指定上下文而不是使用计算的上下文,则可以将该信息添加到语句中。spring.cloud.consul.config.namespring.application.namespring.cloud.consul.config.default-contextapplicationspring.config.import

application.properties
spring.config.import=optional:consul:myhost:8500/contextone;/context/two

这将选择仅从 和 加载配置。/contextone/context/two

通过 导入的 Spring Boot Config Data 方法不需要文件(properties 或 yaml)。bootstrapspring.config.import
通过 导入的 Spring Boot Config Data 方法不需要文件(properties 或 yaml)。bootstrapspring.config.import

定制

可以使用以下属性自定义 Consul Config:

spring:
  cloud:
    consul:
      config:
        enabled: true
        prefix: configuration
        defaultContext: apps
        profileSeparator: '::'
如果已将 或 或 包含 ,则需要将上述值放在 中,而不是 。spring.cloud.bootstrap.enabled=truespring.config.use-legacy-processing=truespring-cloud-starter-bootstrapbootstrap.ymlapplication.yml
  • enabled将此值设置为“false”将禁用 Consul Config

  • prefix设置配置值的基文件夹

  • defaultContext设置所有应用程序使用的文件夹名称

  • profileSeparator设置分隔符的值,该分隔符的值用于将属性源中的配置文件名称与配置文件分开

如果已将 或 或 包含 ,则需要将上述值放在 中,而不是 。spring.cloud.bootstrap.enabled=truespring.config.use-legacy-processing=truespring-cloud-starter-bootstrapbootstrap.ymlapplication.yml

配置监视

Consul Config Watch 利用 consul 监视键前缀的功能。Config Watch 会进行阻塞 Consul HTTP API 调用,以确定当前应用程序是否有任何相关配置数据已更改。如果有新的配置数据,则发布刷新事件。这等效于调用执行器端点。/refresh

要更改 Config Watch 被调用的频率,请更改 .默认值为 1000,以毫秒为单位。延迟是上一次调用结束和下一次调用开始后的时间量。spring.cloud.consul.config.watch.delay

要禁用 Config Watch 集 。spring.cloud.consul.config.watch.enabled=false

手表使用弹簧来安排与领事的通话。默认情况下,它是 a 为 1 的 a。要更改 ,请创建一个以常量命名的 bean。TaskSchedulerThreadPoolTaskSchedulerpoolSizeTaskSchedulerTaskSchedulerConsulConfigAutoConfiguration.CONFIG_WATCH_TASK_SCHEDULER_NAME

YAML 或具有配置的属性

以 YAML 或 Properties 格式存储属性 blob 可能更方便,而不是单个键/值对。将属性设置为 或 。例如,要使用 YAML:spring.cloud.consul.config.formatYAMLPROPERTIES

spring:
  cloud:
    consul:
      config:
        format: YAML
如果已将 或 或 包含 ,则需要将上述值放在 中,而不是 。spring.cloud.bootstrap.enabled=truespring.config.use-legacy-processing=truespring-cloud-starter-bootstrapbootstrap.ymlapplication.yml

必须在 consul 中的相应键中设置 YAML。使用键上方的默认值如下所示:data

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

您可以将 YAML 文档存储在上面列出的任何密钥中。

您可以使用 更改数据密钥。spring.cloud.consul.config.data-key

如果已将 或 或 包含 ,则需要将上述值放在 中,而不是 。spring.cloud.bootstrap.enabled=truespring.config.use-legacy-processing=truespring-cloud-starter-bootstrapbootstrap.ymlapplication.yml

git2consul 与 Config

git2consul 是一个 Consul 社区项目,它将文件从 git 存储库加载到单个密钥到 Consul 中。默认情况下,密钥的名称是文件的名称。YAML 和 Properties 文件分别支持文件扩展名 和 。将属性设置为 。例如:.yml.propertiesspring.cloud.consul.config.formatFILES

bootstrap.yml
spring:
  cloud:
    consul:
      config:
        format: FILES

给定 中的以下键,配置文件和应用程序名称为 :/configdevelopmentfoo

.gitignore
application.yml
bar.properties
foo-development.properties
foo-production.yml
foo.properties
master.ref

将创建以下属性源:

config/foo-development.properties
config/foo.properties
config/application.yml

每个键的值必须是格式正确的 YAML 或属性文件。

快速失败

在某些情况下(如本地开发或某些测试方案),如果 consul 不可用于配置,则不会失败可能很方便。设置将导致配置模块记录警告,而不是引发异常。这将允许应用程序继续正常启动。spring.cloud.consul.config.fail-fast=false

如果已将 或 或 包含 ,则需要将上述值放在 中,而不是 。spring.cloud.bootstrap.enabled=truespring.config.use-legacy-processing=truespring-cloud-starter-bootstrapbootstrap.ymlapplication.yml
如果已将 或 或 包含 ,则需要将上述值放在 中,而不是 。spring.cloud.bootstrap.enabled=truespring.config.use-legacy-processing=truespring-cloud-starter-bootstrapbootstrap.ymlapplication.yml