Apache Camel - 从文件中读取JDBC dataSource属性

时间:2016-03-04 08:57:55

标签: java jdbc apache-camel blueprint-osgi

我使用Apache Camel并尝试从此文件加载数据源属性

config.properties:

url = my_url
user = user_name
password = user_pass

这是dataSource( blueprint.xml ):

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
      <property name="URL" value="my_url"/>
      <property name="user" value="user_name"/>
      <property name="password" value="user_pass"/>
  </bean> 

如何从config.properties中读取值并将它们插入到dataSource属性中?

2 个答案:

答案 0 :(得分:1)

你谈论blueprint.xml和camel,所以我假设你在一个像Karaf / ServiceMix这样的osgi容器中,你正在使用Aries Blueprint。

然后您可以使用cm命名空间和property-placeholder。如果您使用camel并希望动态重新加载您的属性,那么您也可以使用更新策略reload,它在配置更改时启动/停止蓝图容器。这将使用pid“datasource”加载配置(即,在karaf中,文件etc/datasource.cfg):

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0"
           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.2.0">

  <cm:cm-properties id="myProps" persistent-id="datasource" update-strategy="reload"/>

  <bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
      <property name="URL" value="${url}"/>
      <property name="user" value="${user}"/>
      <property name="password" value="${password}"/>
  </bean> 
</blueprint>

如果要在不使用ConfigurationAdmin的情况下使用配置文件或动态重新加载捆绑包,则可以使用ext命名空间:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
           xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0">

    <ext:property-placeholder>
        <ext:location>file:config.properties</ext:location>
    </ext:property-placeholder>

    <bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
          <property name="URL" value="${url}"/>
          <property name="user" value="${user}"/>
          <property name="password" value="${password}"/>
     </bean> 
</blueprint>

答案 1 :(得分:0)

根据代码我假设你可能使用spring作为容器。 spring中的一般解决方案是使用PropertyPlaceHolder,您的配置将如下所示:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>config.properties</value>
    </property>
</bean>

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
  <property name="URL" value="${jdbc.myUrl}"/>
  <property name="user" value="${jdbc.user_name}"/>
  <property name="password" value="${jdbc.user_pass}"/>
</bean> 

请查看example了解详情。