介绍:
ssh开发的项目,放到Linux上如果8个小时不进行任何操作,则会出现以下问题:
解决办法:
1.如果mysql是5以下的可以在hibernate.cfg.xml配置--autoReconnect= true
<property name="connection.url">jdbc:mysql://localhost:3306/yeb?useUnicode=true&characterEncoding=utf-8&autoReconnect=true</property>
2.如果mysql是5或者5以上的则上述方法没效果
修改inux环境的etc/my.cnf (在Window下的为my.ini)
在此文件末尾添加wait_timeout=31536000(1年)
3.用了第二种方法,但是第二天再访问出现了新的问题:
解决方法:用数据连接池来解决
这里用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>
<!-- 配置连接池 -->
<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//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 配置事务实现方式 -->
<property name="transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory
</property>
<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>
<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>
<property name="current_session_context_class">thread</property>
<!-- 显示SQL -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- 配置数据库方言 -->
<property name="dialect">
org.hibernate.dialect.MySQLDialect
</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">Passwd001</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/yeb?useUnicode=true&characterEncoding=utf-8</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>
<mapping class="com.hjc.entity.TokenEntity"/>
<mapping class="com.hjc.entity.CardIdEntity"/>
<mapping class="com.hjc.entity.SysSetEntity"/>
<mapping class="com.hjc.entity.TradeRecordEntity"/>
<mapping class="com.hjc.entity.UserInfoEntity"/>
<mapping class="com.hjc.entity.AdminInfoEntity"/>
</session-factory>
<property name="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.username">root</property>
<property name="connection.password">Passwd001</property>
<property name="connection.url">
jdbc:mysql://localhost:3306/yeb?useUnicode=true&characterEncoding=utf-8</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>
<mapping class="com.hjc.entity.TokenEntity"/>
<mapping class="com.hjc.entity.CardIdEntity"/>
<mapping class="com.hjc.entity.SysSetEntity"/>
<mapping class="com.hjc.entity.TradeRecordEntity"/>
<mapping class="com.hjc.entity.UserInfoEntity"/>
<mapping class="com.hjc.entity.AdminInfoEntity"/>
</session-factory>
</hibernate-configuration>