更新:出于某种原因,花了一点时间才能实现,但是我看到配置文件是特定于bundle pid的,并且通过尝试将相同的CFG文件加载在两个不同的捆绑中,我正在创造种族条件。确保仅在其目标捆绑包中使用CFG文件。
注意:以上仅适用于蓝图捆绑包。如果您不依赖OSGI ConfigAdmin服务来保持捆绑包的动态,并希望从骆驼上下文之类的内容中使用CFG文件,那应该很好。
我有2个通过KARAF 4.0.8"部署"文件夹部署的蓝图。两者都有以下常见部分:
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint https://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<cm:property-placeholder id="common" persistent-id="common" update-strategy="reload" placeholder-prefix="$(" placeholder-suffix=")"/>
<cm:property-placeholder id="sqlcfg" persistent-id="12345" update-strategy="reload" placeholder-prefix="$[" placeholder-suffix="]">
</cm:property-placeholder>
我想加载"共同"共同的配置。但是,当他们从" etc"文件夹共享相同的persistentid和属性文件时,要部署的蓝图第二次保持加载和卸载。如果我让它们从不同的文件加载 - 这一切都可以。
社区的任何想法为什么我有这种行为?预先感谢。
根据我的经验,您要么设置另一个持久ID或设置update-strategy =" none"。这将阻止第二个模块进入加载/卸载环。
缺点是您丢失了配置文件的自动刷新。