2015-07-03 157 views
1

我目前正在使用的項目使用駱駝作爲路由框架。 當春天般地配置方面,我們通過一個包含了一堆駱駝配置路由時,需要採取全球性的或用於控制運行時行爲的屬性文件:從駱駝環境中隨機訪問駱駝屬性

<camel:camelContext xmlns="http://camel.apache.org/schema/spring" id="my-id"> 
    <camel:propertyPlaceholder location="my-system.properties" id="global-properties"/> 
    ... 
</camel:camelContext> 

說my-system.properties有類似下面的條目:

my-system.properties 
# Global properties that control my-system configuration and run time 
... 
foo={{bar}} 
... 

配置時我可以用{{foo}}符號訪問foo屬性的路由。它也可用於使用@PropertyInject註釋的其他豆類。然而,在我的設計中有一個用例需要訪問我的foo屬性,而不是由spring創建的普通POJO(一個枚舉代替但不相關)。因爲這個POJO是通過CamelContext作爲方法參數的,所以我覺得我應該能夠從那裏得到foo的值。然而,我花了一些時間,不能自己弄清楚如何。

我知道我可以再次加載屬性文件,甚至可以獲得系統屬性System.getProperty("bar"),一切都會正常工作,但它看起來像是在欺騙我。

非常感謝您的意見。

回答

2

有上CamelContext的API來解決財產佔位符 - 它的resolvePropertyPlaceholders方法:

+0

這是我發佈之前我嘗試過的第一件事。但我讀錯了文檔。我沒有調用上下文'resolvePropertyPlaceholders(「{{foo}}」),而是調用了'resolvePropertyPlaceholders(「foo」)'並取回了「foo」字符串。你的回答讓我睜大了眼睛,說得很對。我拒絕相信這個偉大的框架會遺漏這樣一個基本的東西。 非常感謝 – Julian

0

如果你的POJO沒有被SpringContext管理,我沒有看到任何方法可以自動注入屬性。雖然你的方法可能看起來並不是最漂亮或優雅的,但它的優點是不會給你任何額外的開銷工具帶來的開銷。

+0

我不想把它注入,因爲我知道這很難。我只是想從我可用的駱駝上下文中編程獲得它。 – Julian