是否可以将环境变量作为 Kafka kafkaProducer.properties 和 KafkaConsumer.properties 文件中的属性值引用

问题描述

我有一个生产者和消费者 Java 代码,我正在尝试升级它以连接使用 SSL 保护的 Kafka。我的情况是 ssl 相关密码只能通过环境变量提供。 那么是否可以直接引用KafkaProducer.properties和KafkaConsumer.properties文件中环境变量引用的值

例如: 我在linux系统中声明了一个环境变量 SSL_KEY_PASSWORD=password

在 KafkaProducer/Consumer 属性中,我声明为, ''' ssl.key.password=${SSL_KEY_PASSWORD} '''

示例 KAFKA 消费者/生产者属性文件配置可能如下所示,

# For SSL
security.protocol=SSL
ssl.truststore.location=/var/private/ssl/client.truststore.jks
ssl.truststore.password=${TRUSTSTORE_PASS_ENV_VARIABLE}
# For SSL auth
ssl.keystore.location=/var/private/ssl/client.keystore.jks
ssl.keystore.password=${KEYSTORE_PASS_ENV_VARIABLE}
ssl.key.password=${KEY_PASS_ENV_VARIABLE}

解决方法

不,他们不能。

不清楚您如何使用文件或 Kafka 客户端。如果来自 shell 命令,您应该围绕正在运行的命令创建一个 bash 包装器,使用 sed 或在运行最终命令之前生成文件的其他模板脚本。

如果您实际上是在编写 Java 代码,则从那里的环境构建属性,而不是使用文件。

,

不要认为属性文件值是内插的,但您可能可以测试一次。或者,您也可以从属性文件中删除这些行,并从如下代码中执行此操作...

   final Properties properties = new Properties();
   final FileInputStream input = new FileInputStream(yourExistingFile);
   
   properties.load(input); 
   properties.put("ssl.key.password",System.getenv("SSL_KEY_PASSWORD"));//this is additional property

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...