更新:由于某种原因,花了一点时间才意识到,但我看到配置文件是特定于包 PID 的,并且通过尝试在两个不同包中的蓝图中加载相同的 cfg 文件,我正在创建一个竞争条件。确保仅在其目标包中使用 cfg 文件。
注意:以上内容仅适用于蓝图捆绑包。如果您不依赖 OSGI ConfigAdmin 服务来动态保存捆绑包,并且希望使用来自 Camel 上下文之类的 cfg 文件,那应该没问题。
我通过 karaf 4.0.8 'deploy' 文件夹部署了 2 个蓝图。两者都有以下共同部分:
<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>
我想从“common”加载两者通用的配置。但是,当它们从“etc”文件夹共享相同的 persistentId 和属性文件时,第二个要部署的蓝图会继续加载和卸载。如果我让它们从不同的文件中加载-一切正常。
来自社区的任何想法为什么我有这种行为?提前致谢。