Можно ли использовать локальные переменные в аннотациях Spring для ActiveMQ / JMS? - PullRequest
0 голосов
/ 03 апреля 2019

Я испытываю 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»?

...