Apache camel Karaf 3.0.5中驼峰应用程序包中的动态配置加载

Apache camel Karaf 3.0.5中驼峰应用程序包中的动态配置加载,apache-camel,apache-karaf,blueprint-osgi,apache-servicemix,aries,Apache Camel,Apache Karaf,Blueprint Osgi,Apache Servicemix,Aries,我有一个简单的Camel应用程序包,它将部署在apacheservicemix 6.1下的karaf3.0.5中。配置文件被放置在etc/目录中(假设它被命名为wf.cfg)。我希望在我的应用程序包中具有动态配置更改功能。因此,只要在wf.cfg中更改了某些内容,就可以立即将其绑定。为此,我在我的 blueprint.xml <cm:property-placeholder persistent-id="wf" update-strategy="reload"> &l

我有一个简单的Camel应用程序包,它将部署在apacheservicemix 6.1下的karaf3.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>

我现在面临的问题是
更新策略
是否设置为
重新加载
。然后它似乎在重新加载整个bean

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


放置完整的
blueprint.xml
属性占位符可以为
更新策略提供两个值:

  • 重新加载:当属性更改时,将异步重新加载blueprint容器。任何属性更改都会停止上下文(并关闭camel),并使用新属性重新启动上下文。一切都是自动完成的
  • :什么也没做。上下文不是shutdown(因此camel),但属性不是注入的。财产更改丢失了
  • 还有另一种在Aries Blueprint中注入属性的方法,通过
    托管属性
    :它们修饰bean定义,并在配置更改时动态地将新属性注入bean。这里有两种模式:
    bean管理的
    (在配置更改时调用方法)和
    容器管理的
    (在属性更改时调用setter)

    使用此
    托管属性
    ,您可以动态拦截配置中的更改,并对其作出响应,而无需重新启动blueprint上下文(因此也无需停止camel上下文)


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

    属性占位符可以为
    更新策略提供两个值:

  • 重新加载:当属性更改时,将异步重新加载blueprint容器。任何属性更改都会停止上下文(并关闭camel),并使用新属性重新启动上下文。一切都是自动完成的
  • :什么也没做。上下文不是shutdown(因此camel),但属性不是注入的。财产更改丢失了
  • 还有另一种在Aries Blueprint中注入属性的方法,通过
    托管属性
    :它们修饰bean定义,并在配置更改时动态地将新属性注入bean。这里有两种模式:
    bean管理的
    (在配置更改时调用方法)和
    容器管理的
    (在属性更改时调用setter)

    使用此
    托管属性
    ,您可以动态拦截配置中的更改,并对其作出响应,而无需重新启动blueprint上下文(因此也无需停止camel上下文)


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

    您能给我指一下“aries blueprint”/camel文档吗?这里解释了
    托管属性
    ?老实说,aries的文档非常小/不推荐使用,
    托管属性
    不是blueprint的一部分,它是aries的扩展。但是,您可以检查源代码和测试,例如:链接已更改:您能给我指一下“aries blueprint”/camel文档,其中解释了
    托管属性
    ?老实说,aries的文档非常小/不推荐,而且
    托管属性
    不是blueprint的一部分,这是白羊座的延伸。但是,您可以检查源和测试,例如:链接已更改: