如何正确从application.properties注入KafkaTopic到@KafkaListener
解决@KafkaListener中配置文件注入Topic带引号的问题
问题根源
你在application.properties中配置的mytopic.topic="testtopic"包含了双引号,Spring读取配置时会把引号当作值的一部分,导致注入到@KafkaListener的topic名称变成了"testtopic"(带引号),而实际你的Kafka集群中存在的是testtopic,因此触发missingTopicsFatal=true的报错。
正确解决方案
方案1:修改配置文件(推荐)
直接去掉配置值的双引号,配置文件内容改为:
mytopic.topic=testtopic
之后保持@KafkaListener的写法不变即可:
@KafkaListener(topics = "${mytopic.topic}")
方案2:通过SpEL处理引号(仅特殊场景使用)
如果因特殊原因无法修改配置文件,可以使用Spring表达式语言(SpEL)在注入时去除引号:
@KafkaListener(topics = "#{${mytopic.topic}.replace('\"', '')}")
验证方法
可以通过@Value注解获取配置值并打印,确认注入的topic名称不带引号:
@Value("${mytopic.topic}") private String topicName; // 在初始化方法或日志中打印验证 System.out.println("注入的topic名称:" + topicName);
内容的提问来源于stack exchange,提问作者curiousengineer
相关产品推荐
相关产品推荐

