我在我的Spring Boot应用程序中使用了@KafkaListener
注释,而没有创建自定义的KafkaListenerContainerFactory
bean。我目前正在我的application.yml文件中设置spring.kafka.consumer.value-deserializer
属性,以分配我的解串器,并且更喜欢通过编程方式进行此操作以进行编译时检查。我意识到创建自己的KafkaListenerContainerFactory
可以让我在工厂设置此属性,但是我想避免样板操作以及在进行SSL设置时的一些额外麻烦。
是否有一种简单的方法可以以编程方式设置我的值反序列化器,而无需创建自己的KafkaListenerContainerFactory
?
答案 0 :(得分:2)
解串器具有用于创建使用者工厂而不是容器工厂的属性,您可以按以下方式覆盖引导程序的使用者工厂:
@Bean
public ConsumerFactory<?, ?> kafkaConsumerFactory(KafkaProperties properties) {
Map<String, Object> props = properties.buildConsumerProperties();
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, MyDeserializer.class);
return new DefaultKafkaConsumerFactory<>(props);
}
答案 1 :(得分:1)
根据docs
您可以设置其他属性,例如:
@KafkaListener(topics = "test-transactional",
properties={"foo:bar","isolation.level:read_committed"})
public void listen(ConsumerRecord<?, ?> cr) throws Exception {
logger.info("got consumer record" + cr.toString());
}
@KafkaListener(topics = "test-transactional",
properties={"isolation.level:read_uncommitted"})
public void listenDifferent(ConsumerRecord<?, ?> cr) throws Exception {
logger.info("uncomitted: got consumer record" + cr.toString());
}