【问题标题】:disable consul configuration in local在本地禁用领事配置
【发布时间】:2019-11-18 10:55:03
【问题描述】:

我在本地创建了一个带有“consul-config”功能的简单 micronaut 应用程序。我的代码能够连接并从领事键/值存储中获取属性。我的 bootstrap.yml 中有以下配置

micronaut:
  application:
    name: user-service
config-client:
  enabled: true
consul:
  client:
    registration:
      enabled: true
    defaultZone: "${CONSUL_HOST:localhost}:${CONSUL_PORT:8500}"

一切都很好,但我不想在本地计算机上使用 consul,因为它涉及网络活动,所以启动需要一些时间。我想避免在本地使用 consul,但在开发、测试和生产环境中需要它。

我的应用中有以下代码。 @Value 注释将尝试加载“db-schema”,如果没有找到,则使用“local”作为默认值。因此,如果 consul 被禁用,那么我的应用程序应该使用“本地”,否则它应该根据 consul 配置加载值。

@Value("${db-schema:local}")
private String dbSchema;

如何在不更改代码且仅使用环境选项的情况下做到这一点?

我尝试设置 VM 选项“-Dmicronaut.config-client.enabled=false”,但它仍然加载 bootstrap.yml 并尝试连接 consul。

【问题讨论】:

  • 你可以根据不同的环境分割你的应用程序属性、bean - local/dev/prod...看看stackoverflow.com/a/56589325/8112217
  • 此链接显示有条件地加载 bean,但我需要本地的所有 bean,除非它不应该去 consul 进行配置。
  • 不仅是bean,还有条件属性,例如db-schema的不同属性

标签: java microservices micronaut


【解决方案1】:

您可以通过多种方式做到这一点。一种是创建一个类似src/main/resources/application-local.yml 的文件,其中包含以下内容:

consul:
  client:
    registration:
      enabled: false

在您的本地环境中export MICRONAUT_ENVIRONMENTS=local

【讨论】:

  • 这在没有 src/main/resources/bootstrap.yml 文件的情况下在本地运行良好,但是如果我包含它,那么引导程序将获得更高的优先级并尝试连接领事并忽略应用程序本地中的属性.yml 因为我在其他环境中需要领事所以我不能删除引导程序。
  • 您可以将 consul.client.registration.enabledbootstrap.yml 移动到 application.yml 或者您可以在 bootstrap-local.yml 中将其设置为 false 而不是 application-local.yml
  • 请注意,您不能将所有与 Consul 相关的设置移动到 application.yml。例如,如果你想使用 Consul 进行分布式配置,你必须在 bootstrap.yml 中定义 micronaut.config-client.enabledconsul.client.defaultZone
猜你喜欢
  • 2018-05-07
  • 2019-02-08
  • 2018-07-05
  • 2018-12-11
  • 1970-01-01
  • 2020-03-24
  • 1970-01-01
  • 2017-08-21
  • 2018-11-18
相关资源
最近更新 更多