@EnableKafka
@Configuration
public class KafkaConfiguration {
@Bean
public ConsumerFactory<String, String> consumerFactory() {
//configurations
return new DefaultKafkaConsumerFactory<>(config);
}
@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory();
factory.setConsumerFactory(consumerFactory());
return factory;
}
}
@Service
public class KafkaConsumer {
private Dep dependency;
@Autowired
public KafkaConsumer(Dep dep){
this.dependency = dep;
}
@KafkaListener(topics = "Kafka_Example", containerFactory = "kafkaListenerContainerFactory")
public void consume(String message) {
System.out.println("Consumed message: " + message);//dependency null here
}
Зависимость правильно подключается автоматически при вызове конструктора.Но позже, когда метод take вызывается слушателем spring kafka, зависимость становится нулевой.Оба раза объект потребителя Кафки один и тот же.Dep - это класс @Service с базовым методом печати.
Как это возможно?
Но когда я добавляю другой метод провайдера контейнерного фактора, он работает, и зависимость не равна нулю.
@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> customKafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory();
factory.setConsumerFactory(consumerFactory());
return factory;
}
с использованием этого как containerFactory работает.
Что изменилось?