hibernate、spring、c3p0整合(连接池)

针对hibernate连接oracle10g时出现的连接耗时问题,根源在于hibernate默认连接池性能不足。解决办法是引入第三方连接池c3p0,并配置相应的参数以提升性能。通过调整c3p0的配置,可以有效改善数据库连接速度。
摘要由CSDN通过智能技术生成

问题场景

在用hibernate连接oracle10g时log中有如下情况出现:

2015-12-17 20:49:13.699:[DEBUG] Obtaining JDBC connection
2015-12-17 20:49:25.413:[DEBUG] Obtained JDBC connection

可见是连接数据库时获取connection耗时较长,问题的根出在了hibernate的连接池性能满足不了要求,hibernate默认的hibernate.connection.pool_size为1,当然若是以为是此值太小就错了,真正的问题是hibernate默认的连接池性能就是不行,如官方文档所述:

Hibernate's internal connection pooling algorithm is rudimentary, and is provided for development and testing purposes. Use a third-party pool for best performance and stability. To use a third-party pool, replace the hibernate.connection.pool_size property with settings specific to your connection pool of choice. This disables Hibernate's internal connection pool. 

解决方法

使用第三方的连接池,如c3p0.
以下为c3p0的配置样例:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
        <property name="driverClass" value="oracle.jdbc.driver.OracleDriver">  
        </property>  
        <property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:ORCL"></property>  
        <property name="user" value="HIBERNATE" />  
        <property name="password" value="HIBERNATE" />  

        <!-- 连接池中保留的最小连接数。 -->  
        <property name="minPoolSize" value="10" />
        <!-- 连接池中保留的最大连接数。 -->
        <property name="maxPoolSize" value="100" />  
        <!-- 最大空闲时间,超过该时间则连接被丢弃。若为0则永不丢弃。Default: 0 -->
        <property name="maxIdleTime" value="1800" />  
        <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。 -->
        <property name="acquireIncrement" value="3" />  
        <!-- JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。 -->
        <property name="maxStatements" value="100" />  
        <!-- 初始化时获取10个连接,取值应在minPoolSize与maxPoolSize之间。 -->
        <property name="initialPoolSize" value="10" />  
        <!-- 每隔多少秒检查所有连接池中的空闲连接。 -->
        <property name="idleConnectionTestPeriod" value="60" />  
        <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 --> 
        <property name="acquireRetryAttempts" value="30" />  
        <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。Default: false--> 
        <property name="breakAfterAcquireFailure" value="true" />  
        <!-- 因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable等方法来提升连接测试的性能。Default: false -->
        <property name="testConnectionOnCheckout" value="false" />  
    </bean>  

以下为参考来源

参考url:http://www.cnblogs.com/xinzehome/p/3721678.html
参考内容如下:

数据源的配置
Spring默认数据源:DriverManagerDataSource

DBCP数据源:BasicDataSource、使用jdbc.properties

C3P0数据源:ComboPooledDataSource

BoneCP数据源:

需要的jar包

l   bonecp-0.6.5.jar

l   google-collections-1.0.jar

l   slf4j-api-1.5.11.jar

l   slf4j-log4j12-1.5.11.jar

l   log4j-1.2.15.jar

1. Spring默认数据源:DriverManagerDataSource

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName"><value>${jdbc.driverClassName}</value></property>
   <property name="url"><value>${jdbc.url}</value></property>
   <property name="username"><value>${jdbc.username}</value></property>
   <property name="password"><value>${jdbc.password}</value></property>
</bean>

2. DBCP数据源:BasicDataSource、使用jdbc.properties

<bean id="dataSource"

  class="org.apache.commons.dbcp.BasicDataSource">

              <property name="driverClassName"

                     value=" oracle.jdbc.driver.OracleDriver">

     
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值