2016-06-07 134 views
0

我有基於Spring的組件,需要能夠通過JMS進行通信,並且希望使用@JmsListener註釋的方法來完成此操作。我的監聽器類需要讀取JSON編碼的有效負載,但還需要讀取一些自定義標題。 我已經設置了一個@Configuration bean,並將它添加到當前基於XML的配置中,在該配置中我配置了必要的消息轉換器。目前我的監聽方法的註解如下:在Spring中配置目標名稱@JmsListener

@JmsListener(destination = "activemq:queue:queue.name") 
    public void handleItemCommand(ProvisionItemCommand itemCommand, @Header(AUTH_HEADER_NAME) String auth) { 

這一切工作,但顯然隊列名稱不能被硬編碼的,它必須是可配置的。使事情複雜化,我們使用一些自定義類來讀取配置數據,因此使用@PropertySource和屬性文件是不可能的。

我一直在被卡住的地方是看到如何設置,所以這可能發生。 Spring 4.2參考文檔告訴我創建並註冊一個自定義PropertySource類(可以由我們的自定義配置代碼支持),但文檔中的示例(http://docs.spring.io/spring/docs/4.1.9.RELEASE/spring-framework-reference/htmlsingle/#beans-property-source-abstraction)僅僅是創建應用程序上下文並添加自定義屬性源對此。 也許我在這裏開發了一個盲點,但是如何創建自定義屬性源並將其添加到已經存在的環境中?我在網絡上發現了幾個不完整的例子,但大多數都是針對Spring 3的,有些似乎是矛盾的。 如果有人能夠清除這個問題,我會很感激,因爲我認爲我99%在那裏,但不知何故最終的1%無法爲我「點擊」。

回答

0

回答我自己的問題,就像我能想到的最簡單的事情似乎可以解決我的問題。 在我@Configuration I類增加了以下內容:

@Autowired 
public void setCustomConfiguration(CustomConfiguration customConfiguration, ConfigurableEnvironment env) { 
    LOG.trace("setCustomConfiguration()"); 
    this.customConfiguration = customConfiguration; 
    env.getPropertySources().addFirst(new CustomPropertySource("custom-config", customConfiguration)); 
} 

然後CustomPropertySource類簡單地查找任何鍵被要求在它的CustomConfiguration。張貼在這裏希望它可以幫助別人;如果有人對此解決方案有任何評論/改進,我很樂意聽到它。

相關問題