无法通过环境变量进行Spring Boot / Spring Kafka SSL配置

时间:2018-07-13 00:05:32

标签: java spring-boot ssl environment-variables spring-kafka

我有一个与Kafka通信的Spring Boot应用程序。

我通过注入环境变量在生产环境中配置此应用程序。

对于kafka,我可以使用环境变量配置大多数内容-引导服务器,ssl信任库位置,ssl信任库密码,组ID,主题,例如:

SPRING_KAFKA_SSL_TRUSTSTORE-LOCATION: "file:/opt/app/jks/totally_real_file.jks"
SPRING_KAFKA_SSL_TRUSTSTORE-PASSWORD: "hunter2"

因为我可以使用环境变量配置ssl密钥库和密码,所以我假设可以配置SSL协议和安全协议;例如:

SPRING_KAFKA_PROPERTIES_SECURITY_PROTOCOL: "SSL"
SPRING_KAFKA_PROPERTIES_SSL_PROTOCOL: "SSL"

但是,我会假设不正确,因为在此处进行设置时,会出现一条消息:

The configuration 'SECURITY_PROTOCOL' was supplied but isn't a known config
The configuration 'SSL_PROTOCOL' was supplied but isn't a known config

出现更多消息!

Bootstrap broker one:9093 disconnected
Bootstrap broker two:9093 disconnected
Bootstrap broker more_than_two:9093 disconnected

这让我很难过。我搜索互联网。 我找到链接:

Spring Kafka SSL setup in Spring boot application.yml

这没有太大帮助,我想通过环境变量进行配置...

我发现github问题链接(情况越来越糟):

https://github.com/spring-projects/spring-integration-kafka/issues/157

这提供了部分线索。

yml:

spring.kafka.properties.security.protocol: "SSL"

应该可以工作,但不能

yml:

spring:
  kafka:
    properties:
      security.protocol: "SSL"
      ssl.protocol: "SSL"

确实有效!但是用环境变量来表示是不可能的。

3 个答案:

答案 0 :(得分:0)

我的解决方法是在application.yml中设置以下内容:

spring:
  kafka:
    properties:
      security.protocol: "SSL"
      ssl.protocol: "SSL"

我不喜欢这种解决方案,因为它需要我为产品和SIT构建不同的工件。 (SIT Kafka没有启用SSL的事实是另一天要再喝一杯的问题)

答案 1 :(得分:0)

引导不可能考虑所有可能的Kafka属性。有这么多。只支持一个子集作为一流属性。

您可以使用系统属性代替环境变量。

编辑

您可以执行以下操作:

spring:
  kafka:
    properties:
      security.protocol: ${SEC_PROT}

答案 2 :(得分:0)

环境变量名称可能不正确。例如,代替此:

SPRING_KAFKA_PROPERTIES_SECURITY_PROTOCOL

我认为您想使用生产者/消费者特定的名称,例如:

SPRING_KAFKA_PRODUCER_PROPERTIES_SECURITY_PROTOCOL

SPRING_KAFKA_CONSUMER_PROPERTIES_SECURITY_PROTOCOL