@ConditionalOnProperty注释在类或者bean方法上进行控制这个bean对象是否被注册,它是否被注册,完成依赖于ConditionalOnProperty里的value的值,为true时,表示被注册,为false表示不注册这个bean。而我们通过matchIfMissing来配置这个value的缺省值,默认是false,即当你不配置时,它是不会自动装配的。
@ConfigurationProperties("kc-kafka")
@Data
public class KafkaProperties {
/**
* 是否开启kafka功能.
*/
private Boolean enabled = true;
/**
* kafka生产者ack机制
*/
private String acks = "1";
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);
}
}
上面的matchIfMissing只控制boolean类型的属性,如果你希望通过字符串属性来控制bean的装配,可以使用name和havingValue的组合。
@Configuration
@RequiredArgsConstructor
@ConditionalOnProperty(name= "kc-kafka.status", havingValue="1")
@EnableConfigurationProperties(KafkaProperties.class)
参与评论
手机查看
返回顶部