用数据库连接池解决org.hibernate.exception.JDBCConnectionException:could not execute query

调试hibernate, 过一段时间网站就报错,后台提示 Connection  is closed 等错误。

百思不得其解, 运行一段时间就会有连接保存,session closed掉。

有人说是数据库的问题,于是查sqlserver库的session连接,以及timeout时间等,都不是根本的解决方式,于是重新改造cp30连接池。


总结了一下,hibernate支持的连接池有这几个:

1.DriverManagerConnectionProvider:代表由Hibernate提供的默认的数据库连接池 

2.C3P0ConnectionProvider:代表C3P0连接池

3.ProxoolConnectionProvider:代表Proxool连接池

4.DBCPConnectionProvider:代表DBCP连接池

转载地址: http://blog.csdn.net/isnotsuitable/article/details/6990505  


在hibernate.cfg.xml中添加C3P0的配置: 

在配置中增加了一项连接前检查连接的项:

testConnectionOnCheckout

如果设置为true,每次从池中取一个连接,将做一下测试,使用automaticTestTable 或者 preferredTestQuery,做一条查询语句.看看连接好不好用,不好用,就关闭它,重新从池中拿一个.


<span style="white-space:pre">	</span><!-- 配置连接池 -->  
            <property name="c3p0.acquire_increment">1</property>  
            <property name="c3p0.idle_test_period">300</property>  
            <property name="c3p0.max_size">20</property>  
           <property name="c3p0.max_statements">100</property>  
            <property name="c3p0.min_size">5</property>  
            <property name="c3p0.timeout">90</property>  
            <property name="c3p0.preferredTestQuery ">select 1 from user where id=1</property>  
            <property name="c3p0.idleConnectionTestPeriod ">18000</property>             
           <property name="c3p0.maxIdleTime">25000</property>           
           <property name="c3p0.testConnectionOnCheckout">true</property>  


整体配置如下:

<?xml version="1.0" encoding="UTF-8"?>    
<!DOCTYPE hibernate-configuration PUBLIC     
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"     
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
<hibernate-configuration>  
    <session-factory>  
        <!-- 配置事务实现方式 -->  
        <property name="transaction.factory_class">  
            org.hibernate.transaction.JDBCTransactionFactory  
        </property>  
  
        <!-- 配置JDBC里batch的大小 -->  
        <property name="jdbc.batch_size">50</property>  
        <property name="cache.use_second_level_cache">false</property>  
  
        <!-- 配置线程安全的session -->  
        <property name="current_session_context_class">thread</property>  
  
        <!-- 显示SQL -->  
        <property name="show_sql">false</property>  
        <property name="format_sql">false</property>  
  
        <!-- 配置数据库方言 -->  
        <property name="dialect">  
            org.hibernate.dialect.MySQLDialect  
        </property>  
  
        <!-- 配置数据库连接 -->  
        <property name="connection.driver_class">  
            com.mysql.jdbc.Driver  
        </property>  
        <property name="connection.username">root</property>  
        <property name="connection.password">111111</property>  
        <property name="connection.url">  
            jdbc:mysql://localhost:3306/alumnus  
        </property>  
        <!-- 配置连接池 -->  
        <property name="hibernate.connection.provider_class">  
               org.hibernate.connection.C3P0ConnectionProvider  
            </property>  
            <property name="c3p0.acquire_increment">1</property>  
            <property name="c3p0.idle_test_period">300</property>  
            <property name="c3p0.max_size">20</property>  
           <property name="c3p0.max_statements">100</property>  
            <property name="c3p0.min_size">5</property>  
            <property name="c3p0.timeout">90</property>  
            <property name="c3p0.preferredTestQuery ">select 1 from user where id=1</property>  
            <property name="c3p0.idleConnectionTestPeriod ">18000</property>             
           <property name="c3p0.maxIdleTime">25000</property>           
           <property name="c3p0.testConnectionOnCheckout">true</property>  
             
        <!-- 指定hibernate管理的映射文件 -->  
        <mapping resource="com/alumnus/data/Users.hbm.xml" />  
        <mapping resource="com/alumnus/data/Alumnus.hbm.xml" />  
        <mapping resource="com/alumnus/data/Register.hbm.xml" />  
    </session-factory>  
</hibernate-configuration> 


运行了几天,再也没有出现那个问题。 OK, 继续监控一下。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值