我有当前的
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"]
但是没有用,而是默认到本地计算机。
上面@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_”前缀以及将配置属性名称转换为环境变量的规则的更多信息。