Я испытываю Spring Boot и ActiveMQ, и мне удалось заставить вещи работать.Но я хотел бы иметь возможность динамически устанавливать место назначения для JmsListener, и у меня потрясающе происходит сбой.
Этот код (что неудивительно) работает ...
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class MsgReceiver {
@JmsListener(destination = "Consumer.myConsumer1.VirtualTopic.TEST-TOPIC")
public void receiveMessage(String strMessage) {
System.out.println("Received -> " + strMessage);
}
}
Так жеэтот код (потому что Spring в порядке с константой String?) ...
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class MsgReceiver {
private final String consumer = "Consumer.myConsumer.VirtualTopic.TEST-TOPIC";
@JmsListener(destination = consumer)
public void receiveMessage(String strMessage) {
System.out.println("Received -> " + strMessage);
}
}
Но этот код не работает ...
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
@Component
public class MsgReceiver {
private String consumer;
public MsgReceiver() {
consumer = "Consumer.myConsumer.VirtualTopic.TEST-TOPIC";
}
@JmsListener(destination = consumer)
public void receiveMessage(String strMessage) {
System.out.println("Received -> " + strMessage);
}
}
Я понимаю, что Spring ненравится непостоянное значение (я предполагаю, что это связано с тем, как аннотации расширяются во время выполнения?).Я также понимаю, что могу сделать что-то вроде:
@JmsListener(destination="${consumer}")
со значением, указанным в файле application.properties.Тем не менее, я пытаюсь найти окончательное решение, в котором потребительская ценность устанавливается с помощью чего-то вроде ...
consumer = SomeConfigUtil.getValueForKey("foo");
Есть ли способ заставить это работать?Или есть лучший способ достичь моей цели?
Добавить примечание. Я видел примеры, использующие «прямой JMS» для управления всем этим, но я должен признать, что аннотации в Spring Boot делают это очень многопроще.Тем не менее, похоже, что единственное решение может заключаться в том, чтобы «свернуть» с помощью «just JMS»?