@Conditional注解可以用于按条件创建Bean(目前遇到有该功能,有时间再看看有没有其他配置功能)
我们可以自定义自己的Condition:
public class KafkaCondition implements Condition {
//重写matches方法,该方法返回true表示启用该配置
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
Environment env = conditionContext.getEnvironment();
return env != null
&&env.getProperty(MyConstants.MY_IMPL).equals(MyConstants.KAFKA_IMPL);
}
}
MyConstants类:
final class ConditionConstants {
static final String MY_IMPL = "service.impl";
static final String DB_IMPL = "database";
static final String KAFKA_IMPL = "kafka";
}
这样我们就可以在application.yml里控制条件了,当然你也可以在matches方法里按自己的想法定义条件。
application.yml里加入:
service:
impl: kafka
经过以上操作,如果我们定义了一个类,就可以控制Spring容器初始化的时候会不会生成该Bean了
@Component
@Conditional(KafkaCondition.class) //只有在service.impl的值是kafka的时候,Spring才会创建该Bean。
public class NgScheduledService {
... ...
}
网友评论