Karaf v4.0.8:多个蓝图无法从同一个 persistent-id 加载配置
Karaf v4.0.8 : Multiple Blueprints cannot load configuration from same persistent-id
更新:由于某种原因花了一点时间才意识到,但我看到配置文件是特定于包 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和properties文件时,第二个要部署的蓝图一直在加载和卸载。
如果我让它们从不同的文件加载 - 一切正常。
来自社区的任何想法为什么我有这种行为?
提前致谢。
根据我的经验,您可以设置不同的 persistent-id 或设置 update-strategy="none"。这将阻止第二个模块进入 loading/unloading 循环。
缺点是你失去了配置文件的自动刷新。
更新:由于某种原因花了一点时间才意识到,但我看到配置文件是特定于包 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和properties文件时,第二个要部署的蓝图一直在加载和卸载。 如果我让它们从不同的文件加载 - 一切正常。
来自社区的任何想法为什么我有这种行为? 提前致谢。
根据我的经验,您可以设置不同的 persistent-id 或设置 update-strategy="none"。这将阻止第二个模块进入 loading/unloading 循环。
缺点是你失去了配置文件的自动刷新。