У меня есть простой 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(',')}
за это предложение, но я не могу заставить его работать. Производитель получает топи c просто отлично. Как использовать Spring Expression Language с Scala?
Вот рабочая 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())
}
}