当前位置: 首页 > 知识库问答 >
问题:

如何在Scala的注释中对数组使用Spring表达式语言

洪飞龙
2023-03-14

我有一个简单的Scala项目,看起来像这样。。。

@Configuration
public class CommonConfiguration{
    ...
    @Value("${spring.kafka.topic}")
    public String topic;
    ...
}
@Service
class KafkaService @Autowired()(producer: KafkaTemplate[String, Array[Byte]], config: CommonConfiguration){

  def sendMessage(msg: String): Unit = {
    println(s"Writing the message $msg ${config.topic}")
    producer.send(config.topic, msg.getBytes());
  }

  @KafkaListener(id="test", topics="#{'${spring.kafka.topic}'.split(',')}")
  def consume(record: ConsumerRecord[String, String]): Unit = {
    System.out.println(s"Consumed Strinsg Message : ${record.value()}")
  }

}

这给了我一个错误。。。

KafkaService.scala:26: error: type mismatch;
[ERROR]  found   : String("#{\'${spring.kafka.topic}\'.split(\',\')}")
[ERROR]  required: Array[String]
[ERROR]   @KafkaListener(id="test", topics= "#{'${spring.kafka.topic}'.split(',')}")

根据这个建议,我尝试使用#{'${ spring.kafka.topic}'。拆分(',')} ,但我无法让它工作。生产者很好地理解了这个主题。如何在Scala中使用Spring表达式语言?

这是工作的Java版本。。。

@Service
public class KafkaJavaService {
    @KafkaListener(id="test", topics="#{'${spring.kafka.topic}'.split(',')}")
    public void consume(ConsumerRecord<String, String> record){
        System.out.println("Consumed String Message : "+record.value())
    }
}

共有1个答案

东方高洁
2023-03-14

根据这个问题,看起来主题=Array("…")应该可以工作。

阅读@RequestMapping文档 : http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/bind/annotation/RequestMapping.html

它接受字符串数组参数作为其路径映射。

因此,这可以使用java:

@RequestMapping(“MYVIEW”)

但在scala中,我需要使用:

@RequestMapping(阵列(“我的看法”))

scala版本有意义,因为注释需要一个字符串数组。但是为什么上面的工作在java中,它不应该给出编译时错误吗?

编辑

这在技术上也不是一回事,因为另一种方式我可以使用CSV。即使工作,它也将是一个1字符串数组,除非Array构造函数做了一些花哨的事情。

它不应该有什么不同;正如我所说,如果String[]元素中的表达式解析为String[],我们会递归地将其拆分(展平它)。看这里和这里。

尝试在这些方法中设置断点;我没有安装Scala,否则我会看一看。

 类似资料:
  • 我是Spring调度器的新手。我读了很多关于@ScheduledExecutorService和TimerTask的文章。 因此,据我所知,@ScheduledExecutorService和ScheduledExecutorService的功能大部分是相同的,但如果您的代码是在spring中,那么最好在代码中使用@ScheduledExecutorService。 所以我的问题是,假设我想在15

  • 如何计算方面中的Spring Security表达式?我想我可以很容易地使用完成这项工作的类I spring框架

  • 静态编程语言允许注释表达式。然而,尚不清楚这些注释如何有用以及如何使用它们。 假设在下面的示例中,我想检查一下,该字符串包含@MyExpr注释中指定的数字。这能实现吗?如何实现?

  • 我正在使用Spring MVC,我正在尝试编写一个每小时运行一次的计划任务。问题是,当应用程序启动时,它应该计算到下一个小时的持续时间,并将该值用作初始延迟。这样,计划的任务可以在精确的时间运行,比如下午1点。。。下午2点。。。下午三点等等。 在下面的代码中,我试图计算@PostConstruct注释中的初始延迟。但是,当我尝试在@Sched的注释中使用变量时,会收到以下错误消息:注释属性Sche

  • 问题内容: 我想使用常量作为注释值。 常量和可以在批注中使用,但不能在数组中使用,因为在此位置它必须是数组初始化器。注释值仅限于可以内联到类的字节码中的值。这对于数组常量是不可能的,因为必须在加载时构造它。有解决此问题的方法吗? 问题答案: 不,没有解决方法。