java - 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"
确实有效!但不可能用环境变量来表示。
解决方案
boot 不可能考虑所有可能的 Kafka 属性。有这么多。仅支持一个子集作为第一类属性。
您可以使用系统属性而不是环境变量。
编辑
你可以这样做:
spring:
kafka:
properties:
security.protocol: ${SEC_PROT}
推荐阅读
- javascript - 加载子组件之前的 Angular DOM 更新问题
- c - 写入 bin 文件时出错
- javascript - 如何将标签存储在数组中并使用 React 显示它们?
- java - 如何使用 REST 控制器 GET 将 LocalDateTime 反序列化为 LocalDate,其中响应值为 LocalDateTime,DTO 中的值为 LocalDate?
- c - 预期为“int *”,但参数是 C 中的“int”类型
- networkx - 当我尝试通过第三列连接两列时出现问题
- java - 如何绕过 Mod 无效 mod 文件的错误?
- javascript - 不显示一屏通知 React Native
- sql - SQL - CASE 单一条件下的多个变量
- r - 在 predict.merMod 函数参数上