【发布时间】:2021-01-31 00:43:31
【问题描述】:
我有这个 Spring boot application.properties
list1=valueA,valueB
list2=valueC
list3=valueD,valueE
topics=list1,list2,list3
我要做的是在@KafkaListener 注释的topics 元素中使用主题属性值的值
使用表达式
@KafkaListener(topics={"#{'${topics}'.split(',')}"})
我得到list1,list2,list3 作为分隔字符串
如何在此列表中循环以获得valueA,valueB,valueC,valueD,valueE?
编辑:我必须解析topics 属性,以便@KafkaListener 注册消费来自主题valueA、valueB、valueC 等的消息。
我读到可以这样调用方法:
@KafkaListener(topics="#parse(${topics})")
所以,我写了这个方法:
public String[] parse(String s) {
ExpressionParser parser = new SpelExpressionParser();
return Arrays.stream(s.split(",").map(key -> (String)(parser.parse(key).getValue())).toArray(String[]::new);
}
但是parse方法没有被调用
所以,我尝试直接在注释中这样做 这样:
@KafkaListener(topics="#{Arrays.stream('${topics}'.split(',')).map(key->${key}).toArray(String[]::new)}")
但这个解决方案也会给我错误。
编辑 2:
以这种方式修改方法被调用
@KafkaListener(topics="parse()")
@Bean
public String[] parse(String s) {
...
}
问题是如何在方法中获取“主题”道具
【问题讨论】:
-
不清楚你的意思;
topics接受String[]。 -
好的。我正在尝试这样做:
@KafkaListener(topics="#{parse($(topics))}")。方法 parse 返回Arrays.stream(s.split(",")).map(p -> "${p}").toArray(String[]::new);。我知道${p}在 map 中没有意义,但是该方法没有被调用。 -
还不清楚;编辑问题以准确显示您要执行的操作以及问题所在。
-
我编辑了这个问题。我希望现在很清楚。
标签: spring-boot spring-kafka spring-el