2016-03-02 75 views
0

我有一個簡單的駱駝應用程序包,將在Apache服務混合6.1下部署在Karaf 3.0.5中。配置文件被放置在etc/目錄中(假設它被命名爲wf.cfg)。我想在我的應用程序包中具有動態配置更改功能。因此,只要wf.cfg中的任何內容發生更改,都可立即進行捆綁。爲此,我已經添加在下面我 blueprint.xml動態配置加載在Karaf 3.0.5中的駱駝應用程序包

<cm:property-placeholder persistent-id="wf" 
    update-strategy="reload"> 
    <cm:default-properties> 
     <cm:property name="env" value="local" /> 
    </cm:default-properties> 
</cm:property-placeholder> 

<!-- a bean that uses a blueprint property placeholder --> 
<bean id="configBean" class="com.jabong.orchestratorservice.basecomponent.config.ConfigBean"> 
     <property name="env" value="${env}" /> 
</bean> 

我現在面臨的問題是,如果update-strategy設置爲reload。然後它似乎在重新加載整個bean。

有人可以讓我知道有沒有辦法,我可以重新加載只有configBean不是整個捆綁?如果我可以實現這一點,那麼我可以有一些靜態引用到configBean內的配置變量,然後我的應用程序包可以使用它嗎?

完整的blueprint.xml被放置here

回答

3

property-placeholder可以具有用於update-strategy兩個值:

  1. 重載:當所述性能改變的藍圖容器被異步重新加載。任何屬性更改都會停止上下文(並關閉駱駝),並使用新屬性重新啓動它。一切都自動完成。
  2. :沒有做什麼。上下文不是關閉的(所以駱駝),但屬性不注入。該屬性更改將丟失

還有另一種方式在白羊座藍圖注入特性,通過managed-properties:他們裝修bean定義,並動態地注入新的屬性到bean時,配置改變。這裏有兩種模式:bean-managed(在配置更改時調用方法)和container-managed(在屬性更改時調用setter)。

通過這個managed-properties,您可以動態攔截配置中的更改並對其作出響應,而無需重新啓動藍圖上下文(因此不會停止駱駝上下文)。

但是,camel中的組件並非如此動態:它們在創建端點時讀取配置,但僅此而已。如果您想要動態更改路線的配置,這並不容易或不可能。你將不得不停止/開始路線。

+0

您可以請我指向「aries blueprint」/ camel文檔,其中介紹了「managed-properties」? – tuk

+0

說實話,白羊座的文件真的很小/不推薦,而'託管屬性'不是藍圖的一部分,它是白羊座的延伸​​。但是,您可以檢查源代碼和測試,例如:https://github.com/apache/aries/blob/trunk/blueprint/blueprint-itests/src/test/resources/ManagedServiceFactoryTest.xml –