3

我在蓝图中使用 cm:property-placeholder 来加载配置文件:

<!-- 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 访问配置的任何其他属性?

我打算添加属性列表:prop1=11 prop2=22 ... propn=nn

由于数量不同,我无法在蓝图中全部添加。

谢谢你,维克托

4

3 回答 3

2

在蓝图中添加对 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());
}
于 2015-11-25T10:52:47.857 回答
1

您可以在给它 id 之后设置org.apache.aries.blueprint.compendium.cm.CmPropertyPlaceholder
到 myBean 中。<property name="cmpp" ref="cmpp" />
<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); }

唯一的问题是 bundleorg.apache.aries.blueprint.cm不导出包org.apache.aries.blueprint.compendium.cm,所以我无法CmPropertyPlaceholder在 java 中访问。karaf 中是否有任何命令可以额外导出捆绑包?

可以通过上下文访问配置,将查看并发布。

于 2015-11-24T08:17:11.860 回答
0

你最好这样做:

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)在“豆”里面

  • 定义一个公共构造函数(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>

于 2017-01-10T20:58:00.217 回答