在Karaf 3.0.5中的骆驼应用程序捆绑中动态配置加载

tuk*_*tuk 0 apache-camel apache-karaf aries blueprint-osgi apache-servicemix

我有一个简单的Camel应用程序捆绑包,该捆绑包将在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>
Run Code Online (Sandbox Code Playgroud)

我现在面临的问题是如果将update-strategy设置为reload。然后,它似乎正在重新加载整个bean。

有人可以让我知道是否可以只重新加载configBean整个捆绑包吗?如果我能做到这一点,那么可能是我可以对configBean应用程序包可以使用的配置变量进行静态引用?

完整blueprint.xml的放在这里

Jér*_*e B 5

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

  1. reload:属性更改时,异步重新加载蓝图容器。任何属性更改都会停止上下文(并关闭骆驼),并使用新属性重新启动它。一切都是自动完成的。
  2. none:什么没有做。上下文不会关闭(也不会关闭),但是不会注入属性。财产变更丢失

在Aries-Blueprint中还有另一种注入属性的方法,可以通过以下方法managed-properties:它们装饰Bean定义,并在配置更改时将新属性动态注入Bean。这里有两种模式:(bean-managed更改配置时调用方法)和container-managed(更改属性时调用设置器)。

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

但是,骆驼中的组件并不是那么动态:它们在创建端点时读取配置,仅此而已。如果要动态更改路由的配置,这并非易事或不可能。您将不得不停止/开始路线。