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

Dynamic Config Loading in Camel Application Bundle in Karaf 3.0.5

我有一个简单的 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>

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

有人可以告诉我有什么方法可以只重新加载 configBean 而不是整个包吗?如果我能做到这一点,那么我可能可以对 configBean 中的配置变量进行一些静态引用,然后我的应用程序包可以使用这些变量?

完整的blueprint.xml被放置在here.

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

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

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

有了这个 managed-properties,您可以动态拦截配置中的更改并对其做出响应,而无需重新启动蓝图上下文(因此无需停止 camel 上下文)。

然而,camel 中的组件并不是那么动态:它们在创建端点时读取配置,仅此而已。如果您想动态更改路由的配置,这并不容易或不可能。您将必须 stop/start 路线。