Aries Blueprint в Karaf - Может ли план ссылаться на внешний файл свойств

Я использую план ActiveMQ для настройки пула соединений JMS. Я также использую Camel для обслуживания некоторых функций.

Я использую org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer, чтобы разрешить использование внешнего файла свойств при настройке файла camel-context.

Есть ли аналогичная функциональность с использованием чертежей?

Итак, в основном я хочу заменить ${server.address} свойством, которое я получаю из файла свойств в приведенной ниже конфигурации:

<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:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
        xmlns:amq="http://activemq.apache.org/schema/core">

        <bean id="activemqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
             <property name="brokerURL"
                       value="nio://${server.address}" />
        </bean>

        <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
             <property name="maxConnections" value="8" />
             <property name="connectionFactory" ref="activemqConnectionFactory" />
        </bean>

        <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
             <property name="connectionFactory" ref="pooledConnectionFactory" />
             <property name="concurrentConsumers" value="5" />
        </bean>

        <bean id="resourceManager" class="org.apache.activemq.pool.ActiveMQResourceManager"
             init-method="recoverResource">
             <property name="transactionManager" ref="transactionManager" />
             <property name="connectionFactory" ref="activemqConnectionFactory" />
             <property name="resourceName" value="activemq.localhost" />
        </bean>

        <bean id="xaConnectionFactory" class="org.apache.activemq.ActiveMQXAConnectionFactory">
             <argument value="nio://${server.address}" />
        </bean>

        <bean id="connectionFactory" class="org.fusesource.jms.pool.JcaPooledConnectionFactory"
             init-method="start" destroy-method="stop">
             <property name="connectionFactory" ref="pooledConnectionFactory" />
             <property name="name" value="activemq" />
        </bean>

        <reference id="transactionManager" interface="javax.transaction.TransactionManager" />

        <service ref="pooledConnectionFactory" interface="javax.jms.ConnectionFactory">
                <service-properties>
                        <entry key="name" value="localhost" />
                </service-properties>
        </service> 
</blueprint>

person user2130332    schedule 11.03.2013    source источник


Ответы (1)


Вы можете использовать системные свойства и/или конфигурацию через config admin:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<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:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0">

    <!-- Allow the use of system properties -->
    <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]" />

    <!--
        config admin properties from etc/com.example.config.cfg
    -->
    <cm:property-placeholder persistent-id="com.example.config" update-strategy="reload">
        <cm:default-properties>
            <cm:property name="configDir" value="$[karaf.base]/my-config" />
        </cm:default-properties>
    </cm:property-placeholder>

    <bean id="config" class="com.example.Config">
        <property name="rootDir" value="${configDir}" />
        <property name="someSysProp" value="$[someSysProp]" />
    </bean>

</blueprint>

Элемент «ext:property-placeholder» позволяет вам использовать системные свойства (например, karaf.base в примере) через определенный пре- и суффикс-заполнитель, но это необязательно. Если вам нужна только ваша собственная конфигурация, вы можете предоставить ее через файл в etc/etc/com.example.config.cfg и сослаться на нее через идентификатор сохранения.

person apf7188    schedule 11.03.2013
comment
Я добавил <ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]" /> вне верблюжьего контекста и попытался использовать karaf.home внутри верблюжьего контекста. Но его ошибка загрузки данных из этого места. Я пробовал вот так <propertyPlaceholder id="config" location="file:$[karaf.home]/etc/application_config.properties" /> Разве мы не можем получить к нему доступ внутри верблюжьего контекста? - person tvshajeer; 10.04.2017