如何在 Spring 启动时动态添加不同的目标到 JMSListener 注释?
How to add different destination dynamically to JMSListener Annotation in Spring boot?
我正在开发一个从 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
代表 dev
,testing-qa
代表 qa
,testing-prod
代表 production
,所有这些值分别在不同的 application-(ENV).proerpties 中作为 azure.queueName
提供。我想将这些目的地动态传递到 JmsListener Annotation 中的目的地。当我尝试使用
@Value("${azure.queueName}")
private String dest;
并将 dest 传递给注释,如 @JmsListener(destination = dest)
我收到 The value for annotation attribute JmsListener.destination must be a constant expression
错误。谷歌搜索此错误后,我发现我们无法将动态值传递给注释。请帮助我如何解决此问题或任何其他解决方案。
使用
destination="${azure.queueName}"
即直接把占位符放在注解中
您可以使用 application.properties file.For 中定义的动态名称示例:
@JmsListener(destination = "${queue.name}")
由于您无法在此处访问任何 class 变量,因此这是可用的最佳选项。
我正在开发一个从 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
代表 dev
,testing-qa
代表 qa
,testing-prod
代表 production
,所有这些值分别在不同的 application-(ENV).proerpties 中作为 azure.queueName
提供。我想将这些目的地动态传递到 JmsListener Annotation 中的目的地。当我尝试使用
@Value("${azure.queueName}")
private String dest;
并将 dest 传递给注释,如 @JmsListener(destination = dest)
我收到 The value for annotation attribute JmsListener.destination must be a constant expression
错误。谷歌搜索此错误后,我发现我们无法将动态值传递给注释。请帮助我如何解决此问题或任何其他解决方案。
使用
destination="${azure.queueName}"
即直接把占位符放在注解中
您可以使用 application.properties file.For 中定义的动态名称示例:
@JmsListener(destination = "${queue.name}")
由于您无法在此处访问任何 class 变量,因此这是可用的最佳选项。