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 循环。

缺点是你失去了配置文件的自动刷新。