当前位置: 首页 > 知识库问答 >
问题:

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

越新霁
2023-03-14

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

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

对于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

这提供了部分线索。

基督教青年会:

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

应该行,但不行

基督教青年会:

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

真管用!但不可能用环境变量来表示。

共有3个答案

容宏逸
2023-03-14

可能是环境变量名不正确。例如,与此相反:

SPRING_KAFKA_PROPERTIES_SECURITY_PROTOCOL

我想你应该使用生产者/消费者特定的名称,比如:

SPRING\u KAFKA\u PRODUCER\u PROPERTIES\u SECURITY\u PROTOCOL

或者

SPRING\u KAFKA\u CONSUMER\u PROPERTIES\u SECURITY\u PROTOCOL

商德泽
2023-03-14

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

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

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

邹野
2023-03-14

引导不可能考虑每一个可能的Kafka属性。有那么多。仅支持子集作为第一类属性。

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

编辑

你可以这样做:

spring:
  kafka:
    properties:
      security.protocol: ${SEC_PROT}
 类似资料:
  • 本文向大家介绍SpringBoot+docker环境变量配置详解,包括了SpringBoot+docker环境变量配置详解的使用技巧和注意事项,需要的朋友参考一下 项目中遇到springBoot+docker需要配置不同环境变量的问题,做个简单的总结: 1.开发环境ide中启动项目 可以通过ide的环境变量参数配置,启动之后使用哪个配置,比如 这样就使用application-test.yml中的

  • 我试图建立一个简单的Twitter提要应用程序,但我很难实现刷新功能。 以及getlatesttweets函数 这就是我遇到的问题 1) 中的x(全局变量,未在任何其他位置使用)的值。然后(函数(数据)似乎与循环中的其他任何地方不同,并且似乎没有增加。我尝试使用$scope.x或将其作为循环中的函数变量。如果我在tweetsarray中将其硬编码为仅刷新[0],则刷新有效,但[x]返回一个单独的值

  • 如果不配置环境变量,每次登录 MySQL 服务器时就必须进入到 MySQL 的 bin 目录下,也就是输入“cd C:\Program Files\MySQL\MySQL Server 5.7\bin”命令后,才能使用 MySQL 等其它命令工具,这样比较麻烦。配置环境变量以后就可以在任意位置执行 MySQL 命令了,本节主要介绍怎样手动配置环境变量。 MySQL 如果不配置环境变量就只能在 my

  • 类型: Object Nuxt.js 让你可以配置在客户端和服务端共享的环境变量。 例如 (nuxt.config.js): module.exports = { env: { baseUrl: process.env.BASE_URL || 'http://localhost:3000' } } 以上配置我们创建了一个 baseUrl 环境变量,如果应用设定了 BASE_URL

  • 在SpringBoot中读取环境变量的最佳方法是什么? 在Java中,我使用了以下方法: 是否可以使用注释来实现?

  • 本文向大家介绍详解 MAC/Linux Vi配置环境变量及Java环境变量配置,包括了详解 MAC/Linux Vi配置环境变量及Java环境变量配置的使用技巧和注意事项,需要的朋友参考一下 详解 MAC/Linux Vi配置环境变量及Java环境变量配置 vi基础 1、vi的基本概念   (1)基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mod