spring-kafkaのKafkaListenerでtopicsなどは基本的にはプロパティで指定するが動的にメソッドやプロパティ経由で指定したい場合がある。その場合beanRefと組み合わせて実現する。
@Component
public class SampleConsumer {
public String getMyTopic() {
return "mytopic3";
}
// public String myTopic = "mytopic3";
@KafkaListener(topics = "#{sample.myTopic}", beanRef = "sample")
public void processMessage(
beanRefにはこのbean自身を指す名前をつける(デフォルトは__listener)。これでSpELでbeanを参照可能になるので、メソッドやプロパティが呼べる。上記例は#{sample.myTopic}でgetMyTopicを呼んでいる。コメントアウトしているmyTopicプロパティも使用可能。