我有一个简单的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。
答案 0 :(得分:4)
property-placeholder
可以有update-strategy
的两个值:
还有另一种方法可以通过managed-properties
在Aries-Blueprint中注入属性:它们修饰bean定义,并在配置更改时动态地将新属性注入bean中。这里有两种模式:bean-managed
(在配置更改时调用方法)和container-managed
(在属性更改时调用setter)。
使用此managed-properties
,您可以动态拦截配置中的更改并对其进行响应,而无需重新启动蓝图上下文(因此无需停止驼峰上下文)。
然而,骆驼中的组件并不那么动态:它们在创建端点时读取配置,但这就是全部。如果要动态更改路由的配置,则不容易或不可能。你必须停止/开始路线。