我有一个简单的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}'.split(',')}
按照这个建议,但我不能让它工作。制片人很好地理解了这个主题。如何在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条答案
按热度按时间0md85ypi1#
根据这个问题,看起来
topics = Array("...")
应该有用。阅读
@RequestMapping
文档:http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/bind/annotation/requestmapping.html它接受字符串数组参数作为其路径Map。
所以这是通过java实现的:
@RequestMapping("MYVIEW")
但在scala中,我需要使用:@RequestMapping(Array("MYVIEW"))
scala版本很有意义,因为注解需要一个字符串数组。但为什么上面的代码在java中工作,难道它不应该给出编译时错误吗?编辑
这在技术上也是不一样的,因为我可以使用csv。如果数组的构造函数没有什么特别之处,那么即使它工作了,它也将是一个1字符串数组。
这不应该有什么区别;如我所说,如果
String[]
下定决心String[]
,我们递归地将其分解(展平)。看看这里和这里。尝试在这些方法中设置断点;我没有安装scala,否则我会看一看。