【问题标题】:Correct way to load values/properties from spring cloud consul从 spring cloud consul 加载值/属性的正确方法
【发布时间】:2016-07-07 17:25:44
【问题描述】:

我有一个 Spring Boot 应用程序,它在 .yml 文件中定义了许多属性。我正在从文件中的属性转向云中的属性,因此我正在使用 spring cloud consul 中的键/值功能。

我能够从 consul 检索给定键的值,但我看到的唯一方法是记录在案,并且我能够做到这一点的唯一方法是这样的:

@Autowired
private Environment env;

    @RequestMapping("/test")
    String home() {
         return env.getProperty("test.property");
    }

这很好,很漂亮,但是我有一些现有的类仍然设置为以旧方式加载属性:

@Value("${test.property}")
String testProperty;

将 spring cloud consul 的依赖项添加到我的项目后,我收到新错误,提示无法解析所有这些属性。我认为这是因为 spring boot 看到了 consul 依赖项,并且现在忽略了 yml 文件或其中的一部分。

有没有办法让这些属性从 consul 加载而无需更改类中的任何代码?或者我是否需要更改这些类以遵循使用 env 对象的示例?

此外,如果您进一步了解 spring cloud consul 如何与 spring boot 一起用于此特定目的,我们将不胜感激。关于它的文档并不多。

【问题讨论】:

  • 如果您将它与 Spring Cloud Config Client 一起使用,@Value 应该可以正常工作。
  • @M.Deinum 我不是,我正在使用 Spring Cloud Consul
  • 那是服务器端,spring cloud consul 可以很容易地与 spring cloud config 集成,然后你就可以开箱即用。见cloud.spring.io/spring-cloud-consul/spring-cloud-consul.html(最后一节)。
  • @M.Deinum 你有这方面的文件吗?到目前为止我所阅读的所有内容都让我相信,如果我想通过 Spring 连接到 consul 代理,那么我必须在我的应用程序中使用 spring cloud consul。你是说我可以在我的应用程序中使用 spring cloud config 并将其指向运行 consul 的服务器?
  • 嗯,不完全是 spring-cloud-config,而是 consul 对应物(在我之前评论中的文档中)。

标签: java spring-boot cloud consul


【解决方案1】:

我能够让它工作,但这有点棘手。您需要添加 spring cloud consul starter 依赖项。我只有 spring cloud consul 配置依赖。

我必须将 consul 配置属性添加到我的 application.yml 和 bootstrap.yml,我的 boostrap 中的属性只是设置了格式和数据键:

spring:
  cloud:
    consul:
      config:
        format: YAML
        data-key: data

这告诉 spring boot 加载一个 yaml blob,它是我的应用程序配置云目录中关键数据的值。

我的 application.yml 中的配置是他们在示例中提供的默认配置。一旦我将这些配置和 @autoconfiguration 标签添加到我的服务主应用程序类中,一切都开始工作了。

【讨论】:

    猜你喜欢
    • 2016-07-12
    • 1970-01-01
    • 2023-01-13
    • 2017-11-28
    • 2020-05-18
    • 2017-03-25
    • 2018-12-10
    • 2016-07-12
    • 2016-02-18
    相关资源
    最近更新 更多