@Profile 不适用于@KafkaListener

问题描述 投票:0回答:1

我使用了@Profile(“Training”)和@KafkaListener,即使传递随机配置文件,KafkaListener也正在工作。仅当配置文件匹配时才能工作

@Profile("training")
@KafkaListener(id = "my_grp", topicPartitions = {
        @TopicPartition(topic = KafkaTopicConstants.MY_TOPIC, partitions = {"0", "1", "2","3","4","5"})
}, concurrency = KafkaTopicConstants.PARTITION_COUNT)
public void consumeRequest(ConsumerRecord<String,RequestedUrlData> record) {
    try {
            log.error("Consuming Data   :::: ");
    } catch (Exception e) {
       log.error("Exception while consuming ",e);
    }
}

这个类用@Service注释

java spring spring-boot apache-kafka
1个回答
0
投票

spring kafka 文档这样描述了 @KafkaListener 注释

@KafkaListener 注解用于指定 bean 方法作为侦听器容器的侦听器。该 bean 包装在 MessagingMessageListenerAdapter 中,该适配器配置有各种功能,例如用于转换数据的转换器(如有必要)以匹配方法参数。

Spring Kafka

所以注解实际上是用在bean方法上的,并不意味着它注解的方法就是一个bean。它只是用侦听器适配器包装该方法。所以我们无法通过用@Profile注释方法来控制是否创建它。然而,使用@Profile注释该类将阻止创建@Service bean,从而不会创建kafka侦听器,因为现在没有使用@KafkaListener注释bean方法。

© www.soinside.com 2019 - 2024. All rights reserved.