首页 > 解决方案 > Spring Boot/Spring Kafka SSL 通过环境变量配置是不可能的

问题描述

我有一个与 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 引导 application.yml 中的 Spring Kafka SSL 设置

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

我发现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"

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

标签: javaspring-bootsslenvironment-variablesspring-kafka

解决方案


boot 不可能考虑所有可能的 Kafka 属性。有这么多。仅支持一个子集作为第一类属性。

您可以使用系统属性而不是环境变量。

编辑

你可以这样做:

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

推荐阅读