在我的 Spring-Boot-App 中,我想有条件地声明一个 Bean,具体取决于(未)加载的 spring-profiles。
条件:
Profile "a" NOT loaded
AND
Profile "b" NOT loaded
到目前为止我的解决方案(有效):
@Bean
@ConditionalOnExpression("#{!environment.getProperty('spring.profiles.active').contains('a') && !environment.getProperty('spring.profiles.active').contains('b')}")
public MyBean myBean(){/*...*/}
有没有更优雅(更短)的方式来解释这种情况?
特别是我想在这里摆脱Spring Expression Language的使用。
原文由 Mike Boddin 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 Spring 5.1.4(并入 Spring Boot 2.1.2)开始,可以在配置文件字符串注释中使用配置文件表达式。所以:
在 Spring 5.1.4 (Spring Boot 2.1.2) 及更高版本 中,它很简单:
在 Spring 4.x 和 5.0.x 中:
这个 Spring 版本有很多方法,每种方法都有其优点和缺点。当没有太多组合可以涵盖时,我个人喜欢 @Stanislav 用
@Conditional
注释回答。其他方法可以在这个类似的问题中找到:
Spring Profile - 如何包含添加 2 个配置文件的 AND 条件?
Spring:如何在 Profiles 中做 AND?