gpt4 book ai didi

java - 为什么要明确定义 KafkaTemplate bean?

转载 作者:行者123 更新时间:2023-12-04 09:03:48 33 4
gpt4 key购买 nike

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,您甚至不需要创建 ProducerFactory bean 。自动配置会为您解决这个问题:https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-kafka
另见 KafkaProperties.Producer有关如何通过配置属性提供序列化程序的更多信息。
注入(inject) bean 时不考虑泛型:如果它的根类型匹配,那么你很高兴。无论如何,在运行时没有任何泛型——Java 中的类型删除。
您可能只是对 IDE 表示感到困惑。而且由于这些 bean 没有在您的项目中声明,因此它不会从 Spring Boot 在运行时呈现它们的类路径中看到它们。

关于java - 为什么要明确定义 KafkaTemplate bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63501628/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com