我们已经在库伯内特斯中部署了自定义合流Kafka连接器作为状态集,它从Azure KeyVault挂载机密。这些机密包含db用户名和密码
机密作为环境变量被加载到容器中。基于< code > kubernetes-ingress-controller 路径的路由用于暴露restendpoint。
到目前为止,我们的团队在通过 Postman 创建连接器时无法使用环境变量。
连接器配置:
{
"name": "TEST.CONNECTOR.SINK",
"config": {
"connector.class": "io.confluent.connect.jdbc.JdbcSinkConnector",
"errors.log.include.messages": "true",
"table.name.format": "AuditTransaction",
"connection.password": "iampassword", <------------ (1)
"flush.size": "3",
"tasks.max": "1",
"topics": "TEST.CONNECTOR.SOURCE-AuditTransaction",
"key.converter.schemas.enable": "false",
"connection.user": "iamuser", <------------ (2)
"value.converter.schemas.enable": "true",
"name": "TEST.CONNECTOR.SINK",
"errors.tolerance": "all",
"connection.url": "jdbc:sqlserver://testdb.database.windows.net:1433;databaseName=mytestdb01",
"value.converter": "org.apache.kafka.connect.json.JsonConverter",
"insert.mode": "insert",
"errors.log.enable": "true",
"key.converter": "org.apache.kafka.connect.json.JsonConverter"
}
}
(1) 和 (2) - 这里我们想使用带有值的系统环境变量 - $my_db_username=iamuser, $my_db_password=iampassword
。 我们尝试在那里使用
“$my_db_username”
和“$my_db_password”
,但在连接器 Pod 的日志中,它没有解析为各自的值。
日志:
[2020-07-28 12:31:22,838] INFO Starting JDBC Sink task (io.confluent.connect.jdbc.sink.JdbcSinkTask:44)
[2020-07-28 12:31:22,839] INFO JdbcSinkConfig values:
auto.create = false
auto.evolve = false
batch.size = 3000
connection.password = [hidden]
connection.url = jdbc:sqlserver://testdb.database.windows.net:1433;databaseName=mytestdb01
connection.user = $my_db_username
db.timezone = UTC
delete.enabled = false
dialect.name =
fields.whitelist = []
insert.mode = insert
max.retries = 10
pk.fields = []
pk.mode = none
quote.sql.identifiers = ALWAYS
retry.backoff.ms = 3000
table.name.format = AuditTransaction
有没有办法在这个配置中使用系统/容器环境变量,同时使用Postman或其他东西创建连接器?
终于做到了!!使用FileConfi提供者
。所有需要的信息都在这里。
我们只需根据我们的要求对< code > connect-secrets . properties 进行参数化,并在启动时替换env vars值。
这不允许通过Postman使用环境变量。但是根据我们的需要专门调整的参数化的< code > connect-secrets . properties 完成了这项工作,而< code>FileConfigProvider通过从< code > connect-secrets . properties 中选取值来完成其余的工作
在这里找到了使用env变量实现这一点的方法。
问题内容: 我的操作系统是Windows7。我想在我的Java应用程序中读取环境变量。我已经搜索过google,很多人的答案是使用方法 或 。但这似乎不起作用。通过该方法,我可以读取JVM中定义的某些变量的值。 如果我设置一个名为“ Config”的环境变量,其值为“一些配置信息”,那么如何在Java中获取该值? 问题答案: 您应该使用System.getenv(),例如: 从IDE运行时,您可以
问题内容: 我有一个Perl脚本,其中有一个类似的变量。我们可以将$ name的内容设置为可以导入其他文件并在其他文件中使用的环境变量吗? 我尝试过,但是这不起作用。 问题答案: 如果要影响您的进程或子进程的环境,请使用哈希: 如果要影响父进程的环境,则不会。至少没有父进程的合作。标准过程是发出shell脚本并让父进程执行该shell脚本: …并从shell(脚本)中调用该脚本为:
问题内容: Java是否具有默认的“系统环境变量”,当我们设置它时将始终读取/附加它?/ etc似乎仅适用于TOMCAT / JBOSS等。 我不想通过Java系统属性(通过-Dprop1 = value1 -Dprop2 = value2传递)来设置它,因为它涉及shell / batch脚本。 它应可跨操作系统使用,例如Windows中的双击jar文件。 它应该可以在不同的JRE(Sun,IB
问题内容: 所以我的Dockerfile是这样写的: 但是我想用 这样,我只需要在文件的一个位置写入用户名即可。但这是行不通的。 我该如何解决? 谢谢。 问题答案: 使用指令。根据文档: ARG指令定义了一个变量,用户可以在构建时使用docker build命令使用该标志,将其传递给构建器。如果用户指定了未在Dockerfile中定义的构建参数,则构建会输出警告。 因此,您实际上可以像这样使用:
问题内容: 是否可以在log4j xml配置文件中引用系统环境变量(与Java系统属性相反)? 我希望能够执行以下操作: 并使其从系统环境变量中获取,因此我可以避免必须通过-D参数传递太多内容。 问题答案: 仅在log4j 2.X中记录了此语法,因此请确保使用正确的版本。它不适用于1.X版本。
问题内容: 我认为这是另一个简单的问题,但是我无法使用任何Web解决方案。我的项目有一个版本号。每个数字都可以用“。”分隔。或“ _”。我想要一个仅显示前两个数字的变量。 我尝试编写一个普通的脚本来创建Jenkins环境变量。 我想使用前两位数字而不是整个字符串。 我是否正确执行此操作,甚至可以创建一个新的环境变量,并且对此有更好的解决方案吗? 问题答案: 以下groovy片段应传递版本(如您所提