在Karaf 3.0.5中的Camel应用程序包中加载动态配置

时间:2016-03-02 11:44:56

标签: apache-camel apache-karaf blueprint-osgi apache-servicemix aries

我有一个简单的Camel Application捆绑包,它将在Apache Service Mix 6.1下部署在Karaf 3.0.5中。配置文件放在etc/目录中(让我们将其命名为wf.cfg)。我想在我的应用程序包中拥有动态配置更改功能。因此,只要在wf.cfg中更改了某些内容,就可以立即进行捆绑。为此,我在我的文章中添加了以下内容 blueprint.xml

<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

1 个答案:

答案 0 :(得分:4)

property-placeholder可以有update-strategy的两个值:

  1. 重新加载:当属性更改时,会异步重新加载蓝图容器。任何属性更改都会停止上下文(并关闭camel),并使用新属性重新启动它。一切都是自动完成的。
  2. :什么都没做。上下文不是关闭(以及驼峰),但不会注入属性。财产变更遗失
  3. 还有另一种方法可以通过managed-properties在Aries-Blueprint中注入属性:它们修饰bean定义,并在配置更改时动态地将新属性注入bean中。这里有两种模式:bean-managed(在配置更改时调用方法)和container-managed(在属性更改时调用setter)。

    使用此managed-properties,您可以动态拦截配置中的更改并对其进行响应,而无需重新启动蓝图上下文(因此无需停止驼峰上下文)。

    然而,骆驼中的组件并不那么动态:它们在创建端点时读取配置,但这就是全部。如果要动态更改路由的配置,则不容易或不可能。你必须停止/开始路线。