从 java 访问 Karaf cfg 文件中的属性?
Accessing properties in Karaf cfg file from java?
我在蓝图中使用 cm:property-占位符来加载配置文件:
<!-- External configuration -->
<cm:property-placeholder persistent-id="mubyndle" update-strategy="reload">
<cm:default-properties>
<cm:property name="schemaValidation" value="false"/>
</cm:default-properties>
</cm:property-placeholder>
<bean id="myBean" class="com.mybean">
<property name="abc" value="${abc}" />
</bean>
我可以将值设置到 bean 中,例如 ${abc}。
如何从 java 访问任何其他 属性 配置?
我打算添加属性列表:
道具 1=11
prop2=22
...
propn=nn
由于数量不同,我无法在蓝图中添加所有内容。
谢谢,
维克多
您可以将 org.apache.aries.blueprint.compendium.cm.CmPropertyPlaceholder
设置为 myBean 作为 <property name="cmpp" ref="cmpp" />
在给它 id <cm:property-placeholder id="cmpp" ...
.
之后
然后在myBean中为cmpp添加setter:
public void setProperties(CmPropertyPlaceholder properties) {
Configuration config = CmUtils.getConfiguration(properties.getConfigAdmin(), properties.getPersistentId());
if (config != null) {
Dictionary props = config.getProperties();
System.out.println(props);
}
唯一的问题是包 org.apache.aries.blueprint.cm
不导出包 org.apache.aries.blueprint.compendium.cm
,所以我无法访问 java 中的 CmPropertyPlaceholder
。 karaf 中是否有任何命令可以额外导出一个包的包?
可以通过上下文访问配置,将对此进行调查并post。
在蓝图中添加对 ConfigurationAdmin 服务的引用:
<reference id="configAdmin" interface="org.osgi.service.cm.ConfigurationAdmin" />
将其设置为 bean:
<bean id="myBean" class="com.mybean">
<property name="abc" value="${abc}" />
<property name="configAdmin" ref="configAdmin" />
</bean>
豆中:
private ConfigurationAdmin configAdmin;
public void setConfigAdmin(ConfigurationAdmin configAdmin) throws IOException {
this.configAdmin = configAdmin;
System.out.println(configAdmin);
System.out.println(configAdmin.getConfiguration("any-persistent-id").getProperties());
}
你最好这样做:
a) 在 blueprint.xml
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.1.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
...
<cm:property-placeholder persistent-id="<name of cfg file>"
update-strategy="reload">
<cm:default-properties>
<cm:property name="<property name in file>" value="<value>" />
</cm:default-properties>
</cm:property-placeholder>
<bean id="<name of Bean>" class="<full name of class>" >
<property name="<property name in file>" value="${<value>}"></property>
</bean>
b) 在 "bean"
里面
- 定义一个public构造函数(Spring要求的定义)
- 定义一个变量及其Setter:
private <Type of> <name of variable>;
public <Constructor> (){} // no parameters
public void set<property name in file first upper letter>(<Type of> <property name in file>) {
<name of variable> = <property name A>;
}
c) 将配置文件添加到“/etc”文件夹中:
<name of cfg file>.cfg
显然,在其中,属性:
<Property name> = <value>
我在蓝图中使用 cm:property-占位符来加载配置文件:
<!-- External configuration -->
<cm:property-placeholder persistent-id="mubyndle" update-strategy="reload">
<cm:default-properties>
<cm:property name="schemaValidation" value="false"/>
</cm:default-properties>
</cm:property-placeholder>
<bean id="myBean" class="com.mybean">
<property name="abc" value="${abc}" />
</bean>
我可以将值设置到 bean 中,例如 ${abc}。
如何从 java 访问任何其他 属性 配置?
我打算添加属性列表: 道具 1=11 prop2=22 ... propn=nn
由于数量不同,我无法在蓝图中添加所有内容。
谢谢, 维克多
您可以将 org.apache.aries.blueprint.compendium.cm.CmPropertyPlaceholder
设置为 myBean 作为 <property name="cmpp" ref="cmpp" />
在给它 id <cm:property-placeholder id="cmpp" ...
.
然后在myBean中为cmpp添加setter:
public void setProperties(CmPropertyPlaceholder properties) {
Configuration config = CmUtils.getConfiguration(properties.getConfigAdmin(), properties.getPersistentId());
if (config != null) {
Dictionary props = config.getProperties();
System.out.println(props);
}
唯一的问题是包 org.apache.aries.blueprint.cm
不导出包 org.apache.aries.blueprint.compendium.cm
,所以我无法访问 java 中的 CmPropertyPlaceholder
。 karaf 中是否有任何命令可以额外导出一个包的包?
可以通过上下文访问配置,将对此进行调查并post。
在蓝图中添加对 ConfigurationAdmin 服务的引用:
<reference id="configAdmin" interface="org.osgi.service.cm.ConfigurationAdmin" />
将其设置为 bean:
<bean id="myBean" class="com.mybean">
<property name="abc" value="${abc}" />
<property name="configAdmin" ref="configAdmin" />
</bean>
豆中:
private ConfigurationAdmin configAdmin;
public void setConfigAdmin(ConfigurationAdmin configAdmin) throws IOException {
this.configAdmin = configAdmin;
System.out.println(configAdmin);
System.out.println(configAdmin.getConfiguration("any-persistent-id").getProperties());
}
你最好这样做:
a) 在 blueprint.xml
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.1.0"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
...
<cm:property-placeholder persistent-id="<name of cfg file>"
update-strategy="reload">
<cm:default-properties>
<cm:property name="<property name in file>" value="<value>" />
</cm:default-properties>
</cm:property-placeholder>
<bean id="<name of Bean>" class="<full name of class>" >
<property name="<property name in file>" value="${<value>}"></property>
</bean>
b) 在 "bean"
里面- 定义一个public构造函数(Spring要求的定义)
- 定义一个变量及其Setter:
private <Type of> <name of variable>; public <Constructor> (){} // no parameters public void set<property name in file first upper letter>(<Type of> <property name in file>) { <name of variable> = <property name A>; }
c) 将配置文件添加到“/etc”文件夹中:
<name of cfg file>.cfg
显然,在其中,属性:
<Property name> = <value>