Search code examples
apache-kafkaspring-kafka

Replace Spring Java config with XML for Apache Kafka


Ho can be replaced a Java configuration like this

@Configuration
@EnableKafka
public class KafkaConfig {

}

With a full XML configuration?

Especially how can be methods (or classes) annotated with

@KafkaListener
public void poll(String msg){}

injected into Spring Kafka context as listeners?


Solution

  • @EnableKafka adds 2 beans to the application context:

        @Override
        public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
            if (!registry.containsBeanDefinition(
                    KafkaListenerConfigUtils.KAFKA_LISTENER_ANNOTATION_PROCESSOR_BEAN_NAME)) {
    
                registry.registerBeanDefinition(KafkaListenerConfigUtils.KAFKA_LISTENER_ANNOTATION_PROCESSOR_BEAN_NAME,
                        new RootBeanDefinition(KafkaListenerAnnotationBeanPostProcessor.class));
            }
    
            if (!registry.containsBeanDefinition(KafkaListenerConfigUtils.KAFKA_LISTENER_ENDPOINT_REGISTRY_BEAN_NAME)) {
                registry.registerBeanDefinition(KafkaListenerConfigUtils.KAFKA_LISTENER_ENDPOINT_REGISTRY_BEAN_NAME,
                        new RootBeanDefinition(KafkaListenerEndpointRegistry.class));
            }
        }
    

    So just add those as <bean/> s with those names.

    "org.springframework.kafka.config.internalKafkaListenerAnnotationProcessor"
    
    "org.springframework.kafka.config.internalKafkaListenerEndpointRegistry"