gpt4 book ai didi

java - 在每个类使用的 OSGi Karaf 和 Blueprint 中重新加载 .cfg 文件的内容

转载 作者:行者123 更新时间:2023-12-02 03:38:58 25 4
gpt4 key购买 nike

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

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

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

我的问题是,安装或更新我的 bundle 后,我可以在控制台中看到该值。此后,当调用该类的对象时,该值被设置为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>

Java MyClass 类:

class MyClass {
private String attribute;

//getter and setter

public MyClass(){
init();
}

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

Karaf 输出:

karaf@root()> data : null

最佳答案

您在构造函数中调用 init。此时该属性尚未设置。删除这个调用,它应该可以工作。

另一个问题可能是 init 是私有(private)的。我不确定蓝图是否可以将其称为 init-method。

关于java - 在每个类使用的 OSGi Karaf 和 Blueprint 中重新加载 .cfg 文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37072566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com