Helm values.yaml配置的Spring占位符部署后未解析替换问题咨询
原方案不可行的原因
- 你之前将配置写在
spring.cloud.dataflow.server.extraEnvVars下,作用是给SCDF Server本身的容器注入环境变量,不是给它部署的Stream/Task业务应用注入配置 - Helm和Kubernetes部署过程不会解析Spring专属的
${}属性占位符,所以占位符会原封不动保留,不会被替换为实际的任务/流名称
统一适配Stream和Task的配置方案
两种实现都不需要修改Java代码添加条件判断:
方案1:业务应用侧统一配置(推荐)
SCDF在部署Stream和Task应用时,会自动给业务容器注入对应名称的环境变量,你只需要在业务应用的application.yaml中通过Spring占位符的优先级特性即可实现自动适配:
# 业务应用的application.yaml配置 app: # 优先取Stream名称,不存在则取Task名称,都不存在则使用默认值 name: ${spring.cloud.dataflow.stream.name:${spring.cloud.task.name:unknown}}
代码中直接注入@Value("${app.name}")即可使用,无需任何条件判断逻辑。
方案2:SCDF全局配置(适合所有应用统一生效的场景)
如果你希望所有部署在SCDF上的应用都自动带有这个统一属性,不需要每个应用单独配置,可以修改Helm values.yaml的对应配置,注意要写对配置层级,不能放在server的extraEnvVars下:
spring: cloud: dataflow: # 全局应用属性,SCDF部署应用时会自动注入到业务应用中 applicationProperties: stream: app.app.name: ${spring.cloud.dataflow.stream.name} task: app.app.name: ${spring.cloud.task.name}
SCDF Server在下发应用部署配置时会自动解析上述占位符,替换为对应Stream/Task的实际名称后再传给业务应用,业务应用直接注入@Value("${app.name}")即可使用。
内容的提问来源于stack exchange,提问作者Vin
相关产品推荐
相关产品推荐

