如何解决如果 bean 不存在,则禁用所需的 bean
我有一个 EventProducer,它通过 Kafka 向所有消费者发送消息。现在我希望能够通过应用程序属性禁用 Kafka。我通过 ConditionalOnProperty 禁用了 KafkaConfiguration bean。现在的问题是 EventProducer 抛出错误,因为 KafkaConfiguration bean 不存在,尽管在禁用 Kafka 时无法访问 bean。字段不存在 ConditionalOnProperty。如何忽略 EventProducer 中的 KafkaConfiguration?
@Service
@requiredArgsConstructor
public class EventProducer {
@Value("${kafka.enabled}")
private final boolean kafkaEnabled;
private final KafkaConfiguration kafkaConfiguration;
...
}
@EnableKafka
@Configuration
@ConfigurationProperties(prefix = "kafka")
@ConditionalOnProperty(value = "kafka.enabled",havingValue = "true")
@requiredArgsConstructor
public class KafkaConfiguration {
...
}
解决方法
使用@Autowired(required = false)
,在这种情况下,如果kafkaConfiguration
bean 不存在,null
字段保持KafkaConfiguration
,这意味着字段kafkaEnabled
是多余的。
@Service
public class EventProducer {
@Autowired(required = false)
private KafkaConfiguration kafkaConfiguration;
...
}
请注意,此代码不使用构造函数自动连接(删除了 @RequiredArgsConstructor
),因此该字段不再是 final
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。