【问题标题】:Aries Blueprint in Karaf - Can a blueprint reference an external properties fileKaraf 中的 Aries 蓝图 - 蓝图能否引用外部属性文件
【发布时间】:2013-02-26 03:36:50
【问题描述】:

我正在使用 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>

【问题讨论】:

    标签: apache-camel apache-karaf blueprint-osgi


    【解决方案1】:

    您可以通过配置管理员使用系统属性和/或配置:

    <?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 并通过 persistence-id 引用它。

    【讨论】:

    • 我在camelcontext之外添加了&lt;ext:property-placeholder placeholder-prefix="$[" placeholder-suffix="]" /&gt;并尝试在camelcontext内部使用karaf.home。但它未能从该位置加载数据。我试过这样&lt;propertyPlaceholder id="config" location="file:$[karaf.home]/etc/application_config.properties" /&gt;我们不能在camelcontext中访问它吗?
    猜你喜欢
    • 2013-08-07
    • 1970-01-01
    • 2020-02-23
    • 2012-02-28
    • 1970-01-01
    • 2018-02-05
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    相关资源
    最近更新 更多