如何在Spring启动时动态添加不同的目标到JMSListener注释?

时间:2017-03-01 13:07:08

标签: java spring-boot annotations spring-jms spring-annotations

我正在开发一个从Azure服务总线读取消息的应用程序。这个应用程序是使用spring boot,Spring jms和Qpid jms客户端创建的。我能够正确地从队列中读取消息,没有任何问题。 PFB我用来阅读消息的代码。

@Service
public class QueueReceiver {
@JmsListener(destination = "testing")
public void onMessage(String message) {
    if (null != message) {
        System.out.println("Received message from Queue: " + message);
    }
}}

问题是我们针对不同的环境设置了不同的目的地,例如testing devtesting-qa {1}}和qa testing-prod,所有这些值分别在不同的应用程序(ENV).proerpties中以production提供。我想在JmsListener Annotation中将这些目标动态传递到目标。当我尝试使用

azure.queueName

并将dest传递给注释@Value("${azure.queueName}") private String dest;

我收到@JmsListener(destination = dest)错误。在使用此错误进行Google搜索后,我发现我们无法将动态值传递给Annotation。请帮助我解决此问题或任何其他解决方案。

2 个答案:

答案 0 :(得分:5)

使用

destination="${azure.queueName}"

即。将占位符直接放在注释中。

答案 1 :(得分:0)

您可以使用application.properties文件中定义的动态名称。例如:

@JmsListener(destination = "${queue.name}")

由于您在这里无法访问任何类变量,因此这是最佳选择。