Mysql+hibernate 长时间不操作再进入,导致连接池关闭的问题解决。
来源:互联网 发布:linux c语言 文件路径 编辑:程序博客网 时间:2024/05/19 14:19
ERROR [2016-04-27 07:59:38] [http-bio-80-exec-10] org.hibernate.transaction.JDBCTransaction:95 - JDBC begin failedcom.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:526)at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)at com.mysql.jdbc.Util.getInstance(Util.java:387)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:862)at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1237)at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1232)at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4832)at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:331)at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.setAutoCommit(PoolingDataSource.java:317)at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:91)at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1353)at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:556)at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:372)at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:417)at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:255)at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)at com.sun.proxy.$Proxy21.chkShopUsernameUnique(Unknown Source)at com.wxshop.sys.ShopAdminLoginController.adminLogin(ShopAdminLoginController.java:80)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)上网查看了一下,基本靠谱的回答是,MySQL的默认wait-timeout是8小时,8小时后自动关闭闲置链接,我的问题发生频率也基本在8小时左右,解决方法如下:
参考帖子:http://www.cnblogs.com/interdrp/p/4177648.html
a)解决的方法有3种:
增加wait_timeout的时间。
减少Connection pools中connection的lifetime。
测试Connection pools中connection的有效性。
b)具体解决方案:
1、换一下JDBC驱动,JDBC3.1.0-alpha及以前版本会出现此问题,下载新的JDBC驱动
1、换一下JDBC驱动,JDBC3.1.0-alpha及以前版本会出现此问题,下载新的JDBC驱动
2、使用hibernate配置:
使用hibernate:
<property name="connection.autoReconnect">true</property> <!--这个是最主要的-->
<property name="connection.autoReconnectForPools">true</property>
<property name="connection.is-connection-validation-required">true</property>
加入以上property,可解决此问题,如果未使用hibernate等持久化管理框架,可在mysql的url中加入autoReconnect=true,这样就可以解决。
原因很简单。在对数据库操作结束后关闭连接是正确的做法,没什么大问题。至于出现:No operations allowed after connection closed。这样的问题原因只有一个,你这里和数据库的连接Connection是一个Static的,程序共享这一个Connection。所以第一次对数据库操作没问题,当把Connection关闭后,第二次还想操作数据库时Connection肯定不存在了。
但是 我按照上面的配置 启动系统出现错误,提示SAX解析失败,所以变通一下:
改为添加一下代码到hibernate配置:
<!-- MySql的连接池等待时间是8小时 8小时后自动断掉连接池 所以应该设定autoReconnect-->
<prop key="connection.autoReconnect">true</prop>
<prop key="connection.autoReconnectForPools">true</prop>
<prop key="connection.is-connection-validation-required">true</prop>
效果起不起作用,明天看一下效果。
但是 我按照上面的配置 启动系统出现错误,提示SAX解析失败,所以变通一下:
改为添加一下代码到hibernate配置:
<!-- MySql的连接池等待时间是8小时 8小时后自动断掉连接池 所以应该设定autoReconnect-->
<prop key="connection.autoReconnect">true</prop>
<prop key="connection.autoReconnectForPools">true</prop>
<prop key="connection.is-connection-validation-required">true</prop>
效果起不起作用,明天看一下效果。
0 0
- Mysql+hibernate 长时间不操作再进入,导致连接池关闭的问题解决。
- 长时间后mysql自动关闭连接
- 长时间后mysql自动关闭连接
- 嵌入式 mysql_free_version出现长时间不操作会自动关闭连接解决方法(有代码)
- mysql 连接长时间不访问失效问题
- Cocos2dx 解决在Android平台运行游戏长时间不操作,导致的锁屏问题
- 嵌入式 mysql长时间没操作会自动关闭连接default是8hours解决方法集合mysql_ping(可能部分重复)
- 如何解决ssh连接后长时间不操作断线的问题?
- SSH连接linux时,长时间不操作就断开的解决方案
- Apache-XMLRpc客户端连接不关闭问题解决
- 客户机长时间不登陆域服务器导致的问题
- 自动杀掉长时间sleep的mysql连接
- Hibernate中对于Mysql数据库长时间闲置连接故障解决方法
- red5长时间握手导致连接失败的几个可能性原因
- MYSQL长时间保持连接
- E66 PC套件因多个USB的连接导致连接不上问题解决办法
- hibernate生成cross join导致sybase不识别问题解决
- hibernate生成cross join导致sybase不识别问题解决
- 前言
- PX4 Offboard Control Using MAVROS on ROS
- Java自动装箱和自动拆箱
- UNPv2第二章:Posix IPC
- android源码分析之View的事件分发(上)
- Mysql+hibernate 长时间不操作再进入,导致连接池关闭的问题解决。
- UIPanGestureRecognizer上下左右滑动方向判断算法
- js对日期加减等操作汇总
- VMware载入虚拟机镜像教程 载入VMX文件
- 关于谷歌和IE内核兼容性问题
- HDU--2041
- spark初步使用
- qt 解释
- web工程框架扩展(一)简介