Spring Boot过滤多个Profile

有时候我们需要在开发或者测试环境中屏蔽某些profile,仅仅在生产上启动,那么怎么办呢?

Spring Boot 2.1及以上

这里说的是你生产上没有配置profile,但是测试与开发环境配置了,所以需要在不是生产且不是测试的环境中才使用,对于这个版本,仅仅配置如下代码即可:

1
2
3
@Component
@Profile("!test & !dev")
public class SpecialBean {}

Spring Boot 2.1以下

这个需要用到@Conditional注解,自己去实现一个Conditional即可,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class SomeCustomCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {

// Return true if NOT "test" AND NOT "dev"
return !context.getEnvironment().acceptsProfiles("test")
&& !context.getEnvironment().acceptsProfiles("dev");
}
}

@Bean
@Conditional(SomeCustomCondition.class)
public MyBean specialBean(){/*...*/}

参考stackoverflow相关问题

0%