Java 无法切换自动提交

Java 无法切换自动提交,java,mysql,hibernate,jdbc,Java,Mysql,Hibernate,Jdbc,我有一个事务在Java层中运行了很多小时,当Hibernate尝试持久化整理的数据时,抛出下面显示的异常堆栈跟踪 注意:我还尝试了在处指定的配置 及 ++++++ ERROR org.hibernate.transaction.JDBCTransaction (JDBCTransaction.java:232) - Could not toggle autocommit java.sql.SQLException: No operations allowed after connection

我有一个事务在Java层中运行了很多小时,当Hibernate尝试持久化整理的数据时,抛出下面显示的异常堆栈跟踪

注意:我还尝试了在处指定的配置

++++++

ERROR org.hibernate.transaction.JDBCTransaction (JDBCTransaction.java:232) - Could not toggle autocommit 
java.sql.SQLException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error: 


** BEGIN NESTED EXCEPTION ** 

com.mysql.jdbc.CommunicationsException 
MESSAGE: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException 

STACKTRACE: 

java.io.EOFException 
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1903) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2349) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2860) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2972) 
    at com.mysql.jdbc.Connection.commit(Connection.java:2147) 
    at org.apache.commons.dbcp.DelegatingConnection.commit(DelegatingConnection.java:301) 
    at org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.commit(PoolingDataSource.java:200) 
    at org.hibernate.transaction.JDBCTransaction.commitAndResetAutoCommit(JDBCTransaction.java:170) 
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:146) 
    at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:394) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:117) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:625) 

连接很可能已被数据库断开。在DBCP上指定验证查询,以确保池中的连接仍处于活动状态


MySQL有一个默认的超时时间,在此时间之后,它会终止空闲连接。默认情况下,时间段为8小时

然而,DBCP不知道MySQL服务器何时终止连接,因此这些陈旧的连接仍然会按需分发给应用程序。因此你会得到一个例外

修复方法是将以下属性添加到dbcp配置中:

  • validationQuery=“选择1”
  • testOnBorrow=“true”

这将告诉DBCP验证与该查询的连接。

在尝试使用Lucene从Spring应用程序索引数据时,我们使用了非常类似的stacktrace。问题在于
my.cnf
中的
wait\u timeout
设置。我们刚刚升级了MySQL安装,DBA忘记将等待超时从默认设置更改为以前的3600