一尘不染

当多个配置文件不活动时,如何有条件地声明Bean?

spring

在我的Spring-Boot-App中,我想根据(未加载的)spring-profiles有条件地声明一个Bean。

条件:

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的使用。


阅读 329

收藏
2020-04-16

共1个答案

一尘不染

从Spring 5.1.4(Spring Boot 2.1.2中包含)开始,可以在配置文件字符串注释内使用配置文件表达式。所以:

在Spring 5.1.4(Spring Boot 2.1.2)及更高版本中,它很简单:

@Component
@Profile("!a & !b")
public class MyComponent {}
2020-04-16