使用application.properties中的变量将spring.profiles.active设置为value

时间:2016-09-23 08:05:50

标签: spring

是否可以将spring.profiles.active中的application.properties设置为包含其他变量的值?显然,我无法让它发挥作用。

这就是我想要的:

one=${APP_ONE:foo}
two=${APP_TWO:bar}
spring.profiles.active=${one},${two}

此处,环境变量APP_ONEAPP_TWO也应该被解释并最终放在spring.profiles.active中。

然后,我希望能够在applicationContext.xml标记的<beans profile="one">中引用此内容。

很抱歉,如果我在这里不够清楚,但我不知道如何更准确。

1 个答案:

答案 0 :(得分:1)

有可能。但是,您无法在弹簧检查的属性源顺序的相同(或更低优先级)中定义 spring.profiles.active 的变量。该订单名称为here

在您的情况下,您尝试在同一属性源“内”插入变量。 您可以为其他属性执行此操作,但不能执行spring.profiles.active,因为可能首先选择它以使spring能够决定需要检查其他配置文件特定属性。

如果您将application.properties更改为

Model.where("subjects = ?", 1)

然后使用更高的属性源顺序(例如命令行参数)设置APP_ONE,APP_TWO变量。它应该按预期设置配置文件。

我不明白你问题的第二部分,但如果你想通过编程方式知道哪些配置文件是活动的,你可以简单地自动装配环境并调用相应的方法。

spring.profiles.active=${APP_ONE:foo},${APP_TWO:bar}

环境有像

这样的方法
@Autowired
Environment env;