日期:2014-05-16  浏览次数:20869 次

c3p0和dbcp连接池同时配置产生的问题

项目1数据库连接池配置
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@192.168.249.50:1521:orcl">
</property>
<property name="username" value="test_0407" />
<property name="password" value="test_0407" />
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="ds" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect">com.eka.util.MyDialect</prop>
<prop key="hibernate.c3p0.min_size">10</prop>
<prop key="hibernate.c3p0.max_size">50</prop>
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<prop key="hibernate.c3p0.timeout">1000</prop>
<!-- 最大的PreparedStatement的数量 -->
<prop key="hibernate.c3p0.max_statements">100</prop>
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
<prop key="hibernate.c3p0.acquire_increment">2</prop>
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
<prop key="hibernate.c3p0.idle_test_period">120</prop>
<!-- 每次都验证连接是否可用 -->
<prop key="hibernate.c3p0.validate">false</prop>
</props>
</property>
</bean>

如果是使用hql则使用c3p0连接池,如果是使用sql,则使用dbcp连接池。


项目2连接池配置
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="oracle.jdbc.driver.OracleDriver">
</property>
<property name="url"
value="jdbc:oracle:thin:@192.168.249.50:1521:orcl">
</property>
<property name="username" value="test_0407" />
<property name="password" value="test_0407" />
   </bean>


现在的情况是:
项目1通过webservice调用项目2,项目2在调用中多次跟数据库交互(都是简单的增改,执行速度都是比较快的,调用的方法在job中执行正常,不存在泄露情况)。两个项目使用同一个数据库,数据库oracle连接池最大是150,现在的问题是,如果项目1多次调用项目2之后,项目1就一直处于等待登陆状态(使用pstrace查看锁在查询数据库那里),请各位大大帮忙分析一下!

令如果将项目1和项目2中的dbcp连接池配置调整为:
<bean id="ds"  class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
          <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> 
          <property name="url" value="jdbc:oracle:thin:@192.168.249.50:1521:orcl"/> 
          <property name="username" value="test_0407"/> 
           <property name="password" value="test_0407"/> 
           <!--maxActive: 最大连接数量-->   
           <property name="maxActive" value="50"/> 
           <!--minIdle: 最小空闲连接-->   
           <property name="minIdle" value="10"/> 
           <!--maxIdle: 最大空闲连接-->   
   &nbs