【问题标题】:Spring conditional yaml property valueSpring条件yaml属性值
【发布时间】:2019-10-12 18:06:49
【问题描述】:

这就是我的.yaml 属性文件的一行:

profiles.active: rabbit-${CLUSTER_ENV}, mongo-${CLUSTER_ENV} ...

我只想为rabbit- 属性添加以下逻辑:

if(CLUSTER_ENV == "local") {
   return "dev";
} else {
   return CLUSTER_ENV;
}

其他属性应填写local,但仅在此位置应有条件地填写属性值。我可以以某种方式在 Spring yaml 属性中添加此逻辑吗?

【问题讨论】:

  • 每个配置文件都有一个 yaml 会更干净,所以如果你的活动配置文件是 dev,那么 spring-boot 将加载 application-dev.yml (dzone.com/articles/spring-boot-profiles-1),在这种情况下你可以做什么有明确的 CLUSTER_ENV 设置(我假设它是一个环境变量,所以很容易改变)
  • 我每个配置文件都有一个 yaml,但我想为 Rabbit 属性使用不同的配置文件,这就是我需要条件评估的原因。
  • 我猜你可能必须以编程方式进行。

标签: java spring spring-boot properties yaml


【解决方案1】:

它看起来不漂亮,但你可以使用类似的东西:

 #this can be added on startup
mykey: key1

#a map with your condition
mymap:
  key1: val1
  key2: val2

#your value based on the condition
conditional: con-${mymap.${mykey}}

问候, 维普

根据评论更新:

 #this can be added on startup as variable
mykey: local

#a map with your condition
mymap:
  local: dev
  xyz: test

# your value based on the condition or the key as fallback if the key is not 
# present in mymap.
conditional: con-${mymap.${mykey}:${mykey}}

【讨论】:

  • 但这假设只有两个可能的键?在我的情况下,CLUSTER_ENV 可以有许多不同的值,如果该值没有映射,则应返回该值本身。
  • 如果您的键不存在于地图中,您可以为其添加一个后备,例如:conditional: con-${mymap.${mykey}:${mykey}}
猜你喜欢
  • 2019-04-13
  • 2021-03-06
  • 1970-01-01
  • 2017-08-18
  • 2011-02-03
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 2017-01-18
相关资源
最近更新 更多