2016-03-02 53 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 –