使用Spring云consul配置可以共享配置吗?

时间:2018-01-25 18:19:24

标签: java spring spring-cloud consul spring-cloud-consul

我们在Java 8上使用Spring Cloud Consul Config 1.3-RELEASE用于简单的应用程序helloworldclient,按预期工作bootstrap.xml ...

spring:
  cloud:
    consul:
      token: xxxx-xxxx-xxxx-xxxx
      discovery:
        enabled: true
        register: true
        service-name: helloworldclient-xyz123
        health-check-url: ${HEALTH_CHECK_URL}
      config:
        profile-separator: '/'
        enabled: true
        format: yaml
      host: ${CONSUL_HTTP_ADDR}
      port: 8500
  application:
    name: helloworldclient

运行包含个人资料dev的应用,这是来自/env的加载配置...

    "consul:config/helloworldclient/dev/": {
       "product[0].sku": "BL394D",
       "product[0].quantity": 8 
    }

一切都很好,但我们不确定为什么剩下的领事配置部分甚至存在,以及它们用于什么:

  "consul:config/application/dev/": {},
  "consul:config/application/": {},

这很有趣,因为我们需要共享配置,以便多个应用程序可以从consul加载常见的,特定于环境的配置,如果可能的话;一些问题,以确定这是否是一个可行的解决方案:

问题

  • 除了应用程序配置路径之外,SCC是否尝试从这些位置读取?
  • 默认文件夹config/application是否可配置,以便在启动时应用从config/mysharedconfig读取?
  • 是否适合将/config/application/dev用作共享配置位置,其中多个应用程序可以加载常见的特定于环境的配置?

1 个答案:

答案 0 :(得分:0)

我回答了我自己的问题:

基于documentation - 以及一些快速测试 - Consul通过spring.cloud.consul.config.defaultContext支持共享属性,默认设置为application,从consul:config/application有效加载配置,consul:config/application/dev等,在启动时(当然还有app的配置)。 defaultContext是可自定义的,因此我们将其更改为commoncfg,然后授予所有ACL令牌从该位置读取的权限。你不需要打扰ACL令牌,除非你使用它们,我只提及它,因为我们使用令牌,这一步是必要的。

弹簧:   云:     领事:       配置:         defaultContext:commoncfg