爲目的地添加適當配置的@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