@ConditionalOnProperty注释在类或者bean方法上进行控制这个bean对象是否被注册,它是否被注册,完成依赖于ConditionalOnProperty里的value的值,为true时,表示被注册,为false表示不注册这个bean。而我们通过matchIfMissing来配置这个value的缺省值,默认是false,即当你不配置时,它是不会自动装配的。
在组件中的使用一 声明一个配置类
@ConfigurationProperties("kc-kafka")@Datapublic class KafkaProperties { /** * 是否开启kafka功能. */ private Boolean enabled = true; /** * kafka生产者ack机制 */ private String acks = "1";
通过EnableConfigurationProperties开启配置类,而当前类是否被注册,依赖于kc-kafka.enabled的值,默认是装配这个bean
matchIfMissing=true表示默认在不配置kc-kafak时,它就会装配这个KafkaProviderConfig对象
@Configuration@RequiredArgsConstructor@ConditionalOnProperty(value = "kc-kafka.enabled", matchIfMissing = true)@EnableConfigurationProperties(KafkaProperties.class)public class KafkaProviderConfig { @Autowired KafkaProperties kafkaProperties; @Bean @ConditionalOnBean(DefaultKafkaProducerFactory.class) public KafkaTemplate kafkaTemplate(DefaultKafkaProducerFactory kafkaProducerFactory) { return new KafkaTemplate(kafkaProducerFactory, false); }}
通过name和havingValue为控制bean的装配
上面的matchIfMissing只控制boolean类型的属性,如果你希望通过字符串属性来控制bean的装配,可以使用name和havingValue的组合。
@Configuration@RequiredArgsConstructor@ConditionalOnProperty(name= "kc-kafka.status", havingValue="1")@EnableConfigurationProperties(KafkaProperties.class)
作者:仓储大叔,张占岭,
荣誉:微软MVP
QQ:853066980
支付宝扫一扫,为大叔打赏!