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

嘚啵嘚嘚啵嘚.

---幸运皮


我想来想去,还是要说一下问题出现的情景,吼吼~

本来运行不错,后来老师跟我说,每次早上去上班访问网站的时候就会出现这个问题,重启一下tomcat就好了,等第二天就又出现这样的问题.

后来我查了一下,原来是数据库连接超时的问题,但是,第一次改好后,我以为改好了,因为要等一天的时间(至少是8个小时)去验证呢,结果,过了两天,老师来邮件说,不行,还是那样.

后来,我就纳闷了,怎么验证好了之后再去给老师呢...

后来,在网上一篇文章上说到了修改系统时间,哦哦哦,原来可以这样,所以,这次用修改系统时间的方式来验证了一下,成功了,然后再给老师.

ok,啰嗦完了.


上次好像说到了用修改数据库系统参数的方式来解决长时间不连接出现的问题,但是,那并不是根本的解决方式.在网上查了一下,原来可以用数据库连接池来解决这个问题,这可是从根本上的解决.

这位大神:http://blog.csdn.net/isnotsuitable/article/details/6990505 总结了一下,hibernate支持的连接池有这几个:

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

2.C3P0ConnectionProvider:代表C3P0连接池

3.ProxoolConnectionProvider:代表Proxool连接池

4.DBCPConnectionProvider:代表DBCP连接池

而文档中推荐的是用C3P0,所以就按照这种方式解决:

步骤如下:

步骤一:

导入C3P0.jar.

步骤二:

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

<!-- 配置连接池 -->
		<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.cfg.xml文件:

<?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>

这样,就不会再出现错误啦.


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页