次好像说到了用修改数据库系统参数的方式来解决长时间不连接出现的问题,但是,那并不是根本的解决方式.在网上查了一下,原来可以用数据库连接池来解决这个问题,这可是从根本上的解决.
这位大神:http://blog.youkuaiyun.com/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>
这样,就不会再出现错误啦.