druid+spring事务+removeAbandonedTimeout超时回收导致的问题今天使⽤上述组合做项⽬。。
在做⼀个需要较长时间使⽤数据库的请求时,项⽬⽇志没有任何报错,但是数据库也没有插⼊代码。
初步猜测是数据库连接超过 removeAbandonedTimeout 时间导致数据库连接被强制回收,但是为什么没有报错呢(由于开发环境数据较少,没有这个现象,
但是⽣产环境数据较多,当时数据也没插⼊成功,⽇志也没报错,⼀脸懵)。。
没办法,只有在开发模拟数据,然后跟踪代码,超时时间到后,会⾛到这么⼀段代码:
try {
// This is an around advice: Invoke the next interceptor in the chain.
// This will normally result in a target object being invoked.
retVal = invocation.proceedWithInvocation();
}
catch (Throwable ex) {
// target invocation exception
completeTransactionAfterThrowing(txInfo, ex);
throw ex;
}
spring out 是什么意思finally {
cleanupTransactionInfo(txInfo);
}
进⼊ catch 中执⾏
completeTransactionAfterThrowing(txInfo, ex); (看⽅法名:事务完成后抛出错误)
if (txInfo != null && txInfo.hasTransaction()) {
if (logger.isTraceEnabled()) {
"] after exception: " + ex);
} // 这个ex 就是我们要的错误信息,但是这⾥的⽇志级别却是 trace ,⽆语啊。。我<logger name="org.springframework" level="error"/>是error ,,好吧,⽇志是打印不出来。。靠if (llbackOn(ex)) {
try { TransactionManager().TransactionStatus()); }
catch (TransactionSystemException ex2) {
<("Application exception overridden by rollback exception", ex); ex2.initApplicationException(ex); throw ex2;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论