【问题标题】:servicemix, oracle datasource, connection pooling, max connectionsservicemix、oracle 数据源、连接池、最大连接数
【发布时间】:2014-12-20 08:01:53
【问题描述】:

我正在尝试在 servcemix 4.4.1 中配置连接池。我创建了一个 oracle 数据源对象并设置了用户、密码、url 等属性。我在我的 smx 中部署了以下 xml 作为 osgi 服务。

这是我的数据源配置:

    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"> 

     <bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource"> 
     <property name="URL" value="jdbc:oracle:thin:@connection:url"/> 
 <property name="user" value="****"/> 
 <property name="password" value="*****"/>


 </bean> 

 <service interface="javax.sql.DataSource" ref="dataSource"> 
 <service-properties> 
 <entry key="osgi.jndi.service.name" value="oracleds"/> 
 </service-properties> 
 </service> 
 </blueprint> 

数据源对象已成功创建,我可以在我的包中使用 jndi 查找来检索该对象。

现在我想应用需要声明“最大连接数”的连接池。请建议我如何声明最大编号。上述 xml 中的连接数

提前致谢。

【问题讨论】:

    标签: jdbc connection-pooling apache-karaf apache-servicemix


    【解决方案1】:

    这是我的 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.0.0"
        xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
        xsi:schemaLocation=
                "http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"
        default-activation="eager">
    
        <cm:property-placeholder id="server.placeholder" persistent-id="test.datasource">
            <cm:default-properties>
                <cm:property name="driverClassName" value="oracle.jdbc.pool.OracleDataSource" />
                <cm:property name="validationQuery" value="SELECT 1 FROM DUAL" />
                <cm:property name="defaultReadOnly" value="false" />
                <cm:property name="defaultAutoCommit" value="true" />
                <cm:property name="maxActive" value="100" />
                <cm:property name="whenExhaustedAction" value="2" />
                <cm:property name="maxWait" value="-1" />
                <cm:property name="maxIdle" value="8" />
                <cm:property name="minIdle" value="1" />
                <cm:property name="testOnBorrow" value="true" />
                <cm:property name="testOnReturn" value="true" />
                <cm:property name="timeBetweenEvictionRunsMillis" value="-1" />
                <cm:property name="numTestsPerEvictionRun" value="3" />
                <cm:property name="minEvictableIdleTimeMillis" value="1800000" />
                <cm:property name="testWhileIdle" value="false" />
                <cm:property name="softMinEvictableIdleTimeMillis" value="-1" />
                <cm:property name="lifo" value="true" />
            </cm:default-properties>
        </cm:property-placeholder>
    
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
          <property name="driverClassName" value= "${driverClassName}" />
          <property name="url" value="jdbc:oracle:thin:@${db.host}:${db.port}:${db.instance}" />
          <property name="username" value="${db.user}" />
          <property name="password" value="${db.password}" />
          <property name="maxIdle" value="1" />
        </bean>
    
        <bean id="connectionFactory" class="org.apache.commons.dbcp.DataSourceConnectionFactory">
          <argument ref="dataSource" />
        </bean>
    
        <bean id="connectionPool" class="org.apache.commons.pool.impl.GenericObjectPool" >
          <argument><null/></argument>
          <argument value="${maxActive}" />
          <argument value="${whenExhaustedAction}" />
          <argument value="${maxWait}" />
          <argument value="${maxIdle}" />
          <argument value="${minIdle}" />
          <argument value="${testOnBorrow}" />
          <argument value="${testOnReturn}" />
          <argument value="${timeBetweenEvictionRunsMillis}" />
          <argument value="${numTestsPerEvictionRun}" />
          <argument value="${minEvictableIdleTimeMillis}" />
          <argument value="${testWhileIdle}" />
          <argument value="${softMinEvictableIdleTimeMillis}" />
          <argument value="${lifo}" />
        </bean>
    
        <bean id="pooledConnectionFactory" class="org.apache.commons.dbcp.PoolableConnectionFactory" >
          <argument ref="connectionFactory" />
          <argument ref="connectionPool" />
          <argument><null/></argument>
          <argument value="${validationQuery}" />
          <argument value="${defaultReadOnly}" />
          <argument value="${defaultAutoCommit}" />
        </bean>
    
        <bean id="poolingDataSource" class="org.apache.commons.dbcp.PoolingDataSource" depends-on="pooledConnectionFactory">
          <argument ref="connectionPool" />
        </bean>
    
        <service interface="javax.sql.DataSource" ref="poolingDataSource"> <!--ref="oracleDataSource"-->
            <service-properties>
                <entry key="osgi.jndi.service.name" value="jdbc/testdb"/>
                <entry key="datasource.name" value="jdbc/testdb" />
            </service-properties>
        </service>
    
    </blueprint>
    

    这个数据源工作正常。 我认为属性“maxActive”接近你所需要的。

    【讨论】:

      【解决方案2】:

      您可以选择两种方式:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-22
        • 2013-04-25
        • 2019-02-24
        • 2021-07-23
        • 1970-01-01
        相关资源
        最近更新 更多