如何在Spring Boot中将不同的目标动态添加到JMSListener注释?

ano*_*ous 1 java annotations spring-annotations spring-jms spring-boot

我正在研究一个从Azure服务总线读取消息的应用程序。该应用程序是使用Spring Boot,Spring jms和Qpid jms客户端创建的。我能够从Queue正确读取消息,而没有任何问题。PFB我用来阅读消息的代码。

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

问题是,对于不同的环境,我们有不同的目的地,例如testingfor devtesting-qafor qatesting-prodfor production,所有这些值都分别azure.queueName在不同的application-(ENV).properpties中提供。我想将这些目标动态传递给JmsListener注释中的目标。当我尝试使用

@Value("${azure.queueName}")
private String dest;
Run Code Online (Sandbox Code Playgroud)

并将dest传递给注释 @JmsListener(destination = dest)

我收到The value for annotation attribute JmsListener.destination must be a constant expression错误消息。仔细检查了此错误后,我发现我们无法将动态值传递给注释。请帮助我如何解决此问题或任何其他解决方案。

Gar*_*ell 6

使用

destination="${azure.queueName}"
Run Code Online (Sandbox Code Playgroud)

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