首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在注释值中使用SPEL需要帮助吗?

在注释值中使用SPEL需要帮助吗?
EN

Stack Overflow用户
提问于 2018-03-12 05:13:48
回答 3查看 5.2K关注 0票数 2

在SPEL表达式下面试过,但无法工作。需要帮助!

代码语言:javascript
运行
复制
@KafkaListener(topics = "#{Arrays.asList(${kafka.topic.helloworld}.split(',')).stream().map(p -> p+envSuffix).toArray(String[]::new)}")
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-12 20:40:12

解决方案是:向注释中添加lambda的一种方法如下:在KafkaReceiver类的方法中-

代码语言:javascript
运行
复制
@Autowired
  TopicUtil                      topicUtil;


  @KafkaListener(topics = "#{topicUtil.suffixTopics()}")


  //In the TopicUtil - add the follwoing method

  public String[] suffixTopics() {
      return Arrays.asList(pTopics.split(",")).stream().map(p -> p + envSuffix).toArray(String[]::new);
  }
票数 1
EN

Stack Overflow用户

发布于 2018-03-12 12:43:15

首先,我看到${kafka.topic.helloworld}必须包装到''中,这仅仅是因为属性占位符首先工作,然后SpEL将结果作为一个活动变量。例如,你有,foo,bar,baz。在Java中它看上去怎么样?只不过是错误的代码。但是当它是"foo,bar,baz"时,语言知道它是一个字符串。SpEL也是如此--它一定很像'${kafka.topic.helloworld}'

但这还不是全部。恐怕SpEL不支持lambdas。我建议您有一些实用程序bean,您可以从这个表达式中调用它,例如:

代码语言:javascript
运行
复制
@KafkaListener(topics = "myUtility.parseTopics('${kafka.topic.helloworld}')")

所有这些硬转换逻辑都将在parseTopics()实用程序Java方法中完成。

投影特征中有一个Collection SpEL,但是您仍然需要到处执行数组操作。

票数 1
EN

Stack Overflow用户

发布于 2020-09-11 07:09:34

@Tuneit你可以像这样直接设置卡夫卡的主题。@KafkaListener(主题= "${kafka.topic.helloworld}")

application.properties kafka.topic.helloworld=

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49228492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档