为目的地添加适当配置的@Bean
(要求设置属性的MQQueue
)。
然后将DefaultJmsListenerContainerFactory
配置为在其destinationResolver
属性中使用BeanFactoryDestinationResolver
。
解析器也应该是@Bean
,所以它得到了对bean工厂的引用。
然后,${queues.input}
应解析为队列的bean名称,并且侦听器容器将使用该目标而不是默认的目标解析器,该解析器会创建一个来自Session
的目标。
编辑
只是为了澄清...
注释的destination
属性实际上是得到解决使用配置DestinationResolver
一个Destination
对象目的地名称。
默认解析器(DynamicDestinationResolver
)只是简单地调用session.createQueue()
或session.createTopic()
- 因此您可以获取JMS提供程序的客户端库为您提供的任何默认目标位置。
使用BeanFactoryDestinationResolver
我们将目标名称解析为应用程序上下文中的bean,该应用程序上下文可以是为您的提供程序库定制的完全配置的目标对象。因此,您只需将DMLC配置为使用BF解析器,或者直接(如您尝试)或通过容器工厂 - 用于为每个找到的@JmsListener
创建一个DMLC,并将解析器传递给每个解析器。所以目标名称解析为完全配置的Destination
实例。
我使用IBM MQ,但与Spring并无太大关系。我发现这个帖子可能有帮助,但它没有使用JmsListener。 http://forum.spring.io/forum/spring-projects/integration/jms/97168-how-to-set-wmqconstants-wmq-mqmd-read-enabled-in-spring – JoshMc
@JoshMc感谢您的链接。是的,我也读过那个。我只需要抓住队列对象来设置字段。我只是不知道在春天如何。也许这是不可能通过注释。 – sarahTheButterFly