如何使用 Datastax Java Cassandra 驱动程序将环境变量传递到 application.conf

问题描述 投票:0回答:2

我有当前的

application.conf
...

datastax-java-driver {
  basic.contact-points = ["192.168.23.1:9042"]
  basic {
    load-balancing-policy {
      local-datacenter = datacenter1
    }
  }
  advanced.metrics {
    factory.class = MicrometerMetricsFactory
  }
  advanced.request.warn-if-set-keyspace = false
  advanced.auth-provider {
    class = PlainTextAuthProvider
    username = cassandra
    password = cassandra
  }
  profiles {
    slow {
      basic.request.timeout = 10 seconds
    }
  }
}

我还有一个 IP 地址为 DOCKER_IP 的环境变量。我试过了

basic.contact-points = ["${DOCKER_IP}:9042"]

但是没有用,而是默认到本地计算机。

java cassandra datastax hocon
2个回答
1
投票

上面@Madhavan提供的答案是绝对正确的。为了完整起见,我想稍微扩展一下。

Java 驱动程序使用 Typesafe Config 库来执行其配置。该库提供了几种不同的方法来在运行时覆盖配置值。您可以通过提供与配置名称完全匹配的系统属性来覆盖任何配置值。因此,要覆盖指定的接触点,您可以在调用 JVM 时使用以下标志:

-Ddatastax-java-driver.basic.contact-points.1='1.2.3.4:9042'

这里添加“.1”后缀是因为“contact-points”是一个值数组;请参阅文档了解更多详细信息。

第二个选项是启用配置值的环境变量覆盖,然后提供适当的环境变量。要启用此功能,您应该提供以下系统属性:

-Dconfig.override_with_env_vars=true

然后,您可以通过环境变量为任何配置变量提供值。例如,要完成上面指定的相同替换,您可以使用以下环境变量:

CONFIG_FORCE_datastax__java__driver_basic_contact__points_0="1.2.3.4:9042"

您可以在上面引用的 Typesafe Config 文档中找到有关“CONFIG_FORCE_”前缀以及将配置属性名称转换为环境变量的规则的更多信息。


0
投票

@clunven建议这是可能的,并且这是一个示例,其中完成了。

TL;博士

将其设置为

contact-points = [${CASSANDRA_CONTACT_POINTS}]
,并将环境变量设置为
CASSANDRA_CONTACT_POINTS: "cassandra:9042"
作为示例。

© www.soinside.com 2019 - 2024. All rights reserved.