【发布时间】:2020-12-09 14:05:11
【问题描述】:
Spring Kafka reference documentation 建议显式地为 Kafka 模板创建 bean。我正在使用 spring-boot-starter 2.3.3 和 spring-kafka 2.5.5,我注意到您可以创建一个具有通配符类型的生产者工厂,并且自动创建 Kafka 模板 bean。这种方法的缺点是 IDE 无法再正确评估 @Autowired Kafka 模板 bean 是否实际存在。当您在 Kafka 模板中使用大量不同的值类型时,优点是配置较少。
还有其他原因我应该明确定义这些 bean 吗?
// In a @Configuration class
// Variant: Just define a wildcard producer
@Bean
public ProducerFactory<String, ?> wildcardProducerFactory(){
return new DefaultKafkaProducerFactory<>(config, new StringSerializer(), new JsonSerializer<>());
}
// Variant: Define specific producer and template
@Bean
public ProducerFactory<String, Foo> fooProducerFactory(){
return new DefaultKafkaProducerFactory(config, new StringSerializer(), new JsonSerializer());
}
@Bean
public KafkaTemplate<String, Foo> fooKafkaTemplate(){
return new KafkaTemplate<>(fooProducerFactory());
}
// Somewhere in a @Component class
// Usage here is the same for both variants
@Autowired
private KafkaTemplate<String, Foo> fooKafkaTemplate;
【问题讨论】:
-
可能你使用的是 Spring Boot。请用更多信息扩展您的问题。 Vanilla Spring Kafka 不会自动将
KafkaTemplate创建为 bean。框架中没有约定。这已经是 Spring Boot 的问题了。 -
@ArtemBilan 是的,你是对的,谢谢!我相应地编辑了问题。
标签: java spring-boot spring-kafka