当前位置: 首页 > 知识库问答 >
问题:

重新载入的内容。cfg文件在OSGi卡拉夫和蓝图在每个类使用

洪富
2023-03-14

我正在尝试使用Karaf Blueprint DI和OSGi Bundle将一些外部数据注入到类中。

配置文件位于etc/com.company.feature.config上。cfg,它包含以下参数:attr1=test1

我的目标是在每次调用或使用MyClass的对象时使用此参数。因此文件是红色的。请注意,在运行Karaf期间文件不会更改。

我的问题是,安装或更新捆绑包后,我可以在控制台中看到该值。在此之后,当调用此类的对象时,该值设置为 null

蓝图配置,OSGI-INF/blueprint/context。xml:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"... >
     ...
     <!-- 
          The file is located on etc/com.company.feature.config.cfg under Karaf, 
          and it contains "attr1=test1" 
      -->
     <cm:property-placeholder persistent-id="com.company.feature.config" update-strategy="reload">          
        <cm:default-properties>
           <cm:property name="attr1" value=""/>
        </cm:default-properties>
     </cm:property-placeholder>

     <bean id="my-bean" class="package.MyClass" init-method="init">
        <property name="attribute" value="${attr1}" />
     </bean>
</blueprint>

JavaMyClass类:

class MyClass {
    private String attribute;

    //getter and setter

    public MyClass(){
       init();
    }

    private void init(){
       System.out.println("data : " + attribute);
    }
}

卡拉夫输出 :

karaf@root()> data : null

共有1个答案

郭志泽
2023-03-14

您在构造函数中调用init。此时,属性尚未设置。去掉这个调用,应该可以了。

另一个探测器可能是 init 是私有的。我不确定蓝图是否可以将其称为初始化方法。

 类似资料:
  • Blueprints是关于资源(信息源)的元数据信息。 它有两个目的 - 首先是资源标识本身。 其次是表格。 此完整信息保存在每个插件或主题中的blueprints.yaml文件中。 资源标识 在blueprints.yaml为每个主题和插件定义文件标识。 在蓝图未经过格式化和完美编译之前,不会在Grav存储库中添加资源。 蓝图示例 name: plugin name version: 0.6.0

  • 我正在尝试为Kafka制作人创建一个简单的捆绑包,在apache Karaf版本4.0.3中。 这是我的Java代码 我已经在pom.xml中明确声明了各自的依赖关系 我也部署了那个kafka客户端包。 但在启动生成器时,我看到以下第一次尝试时的异常。 然后连续这个。。。 有没有人对捆绑包提出类似的问题?

  • 问题内容: 我的应用程序的类路径中有一个jar文件。在运行时,我将新类添加到jar文件中,有时还修改现有类的字段/方法。目前,我正在使用URLClassLoader来动态加载类。动态添加的新类可以正确加载,并且可以在运行时使用它们。但是,它无法重新加载在运行时修改的现有类。我读过许多文章,其中指出我们需要显式地处理重新加载,因为一旦加载了该类,则在销毁对该类的所有引用之前,都不会重新加载该类。我也

  • 我有一个带有ApacheFop依赖项的OSGi blueprint容器。当我使用默认配置生成PDF时,俄文符号(而不是文本)会出现问题。在非OSGi测试应用程序中,这个问题很容易解决:我使用定制fop。xconf配置文件和两个arial*。ttf字体文件位于同一目录中。在fop中自动检测。xconf也解决了这个问题。 但在OSGi blueprint容器中,我无法从捆绑资源中读取conf文件。有人

  • 我正在从log4j-slf4j-impl 2.12.0升级到2.17.1。在我之前的代码中,除了 现在我已经升级到2.17.1,我得到了以下错误: org . Apache . Felix . resolver . reason . reason异常:无法解析org . Apache . logging . log4j . slf4j-impl/2 . 17 . 1:缺少需求[org . Apac

  • 我想指定属性文件的位置,OSGi蓝图属性占位符应从中读取属性值: 更新:Configuration felix.configadmin felix.fileinstall适用于我。 我安装了: org.apache.felix.configadmin-1.8.0.jar org . Apache . Felix . file install-3 . 1 . 4 . jar org.eclipse.