连接池(理论上应该是任意连接池) 、spring方法切入、 mybatis 、 redis等待请求 用了mysql连接的方法阻塞超过8小时导致mysql关闭连接 应用复活后用了已关闭连接而异常

服务进程中的服务方法blpop阻塞在redis队列下(等待请求),  使用方(客户代码)向该队列push请求以促使服务方法在阻塞的代码行继续运行下去。

服务方法使用了mybatis的SqlSessionTemplate, 在进入服务方法时spring为mybatis调用了连接池druid的getConnection,

假设很久没有请求来,一直阻塞在blpop处,直到mysql的wait_timeout默认8小时到达(导致mysql实际上已经关闭了该连接),

而此时处在方法内部, 一旦有请求来,代码从阻塞处继续运行,没有机会促使spring调用一次连接池的getConnection,从而没有机会使得连接池获知该连接已无效,而导致使用了一个无效的连接。

但下一次再进入服务方法,又正常了,直到再次超过8小时没有请求过来,又这样。

问题简述:使用了mysql连接的方法执行时间超过了8个小时,导致mysql关闭了连接,而方法复活的时候不知道连接已经关闭了。

根结是应用代码的结构不良。

应该改为:  将服务方法分为两个方法:一个等待请求,一个用请求来执行服务逻辑。   等待请求的方法会阻塞,但不需要spring去切入。     执行服务的方法一旦运行不会阻塞(执行所需时间很短),spring对该方法切入了连接池的getConnection。

时间: 2024-10-29 19:08:13

连接池(理论上应该是任意连接池) 、spring方法切入、 mybatis 、 redis等待请求 用了mysql连接的方法阻塞超过8小时导致mysql关闭连接 应用复活后用了已关闭连接而异常的相关文章

超时时间已到。在从池中获取连接之前超时时间已过,连接池达到最大

NET网站出错信息如下: 说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.InvalidOperationException: 超时时间已到.超时时间已到,但是尚未从池中获取连接.出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小. 源错误: 执行当前 Web 请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息. “/”应用程序中的服务

解决Mysql连接池被关闭 ,hibernate尝试连接不能连接的问题。 (默认mysql连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池。系统发布第二天访问链接关闭问题。

解决Mysql连接池被关闭  ,hibernate尝试连接不能连接的问题. (默认MySQL连接池可以访问的时间为8小时,如果超过8小时没有连接,mysql会自动关闭连接池. 所以系统发布第二天访问会失去链接,导致访问失败.因此稳定解决办法是把hibernate默认的连接池换成c3p0链接池. 在Hibernate(spring管理)中的配置:<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledData

Mysql线程池系列一:什么是线程池和连接池( thread_pool 和 connection_pool)

   thread_pool 和 connection_pool 当客户端请求的数据量比较大的时候,使用线程池可以节约大量的系统资源,使得更多的CPU时间和内存可以高效地利用起来.而数据库连接池的使用则将大大提高程序运行效率,同时,我们可以通过其自身的管理机制来监视数据库连接的数量.使用情况等.本文我们主要就介绍一下线程池和数据库连接池的原理,接下来我们一起来了解一下这一部分内容. 首先介绍什么是mysql thread pool,干什么用的?使用线程池主要可以达到以下两个目的:1.在大并发的时

mybatis3整合spring后如何使用自带连接池

mybatis3自带了数据库连接池. 单独使用mybatis3时只需要在mybatis的配置文件中定义datasouce的地方改变type这个属性为POOLED就可以了. 而在整合了spring之后,数据源不再是依靠mybatis的配置文件来定义了.而是通过SqlSessionFactoryBean中的dataSource属性 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactory

Connection。连接的当前状态为已关闭。

<p style="font: 14px/26px 'microsoft yahei'; margin: 0px 0px 1.1em; text-align: left; color: rgb(51, 51, 51); text-transform: none; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; box-sizing: border-box; widows: 1

(微信API接口开发) 使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理

最近调试原来的微信模拟登陆时发生了"基础连接已关闭,发送时发生错误"的错误提示,原来都是好好的,只是很久没用了. 出错代码如下: ? 1 2 3 4 5 6 7 HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN");///cgi-bin/loginpage?

outlook2010怎么老提示IMAP服务器已关闭连接啊

  最近在Outlook中使用 网易 163邮件的IMAP功能时,发现接收邮件的速度非常慢,才几封邮件就花了至少15分钟才停止了同步邮件服务器的过程,然后提示一个对话框:"IMAP 服务器已关闭连接.如果连接处于空闲状态的时间过长,则会发生此现象."如下图所示.此现象时有时无! 故障图 此现象多数为网络延迟或者邮件提供商方面的问题,可以通过设置"Internet 电子邮件设置"-"服务器超时"修改成10分钟.可以避免出现此类情况.  

[转载]使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理

转载,原文来自 http://blog.csdn.net/hawksoft/article/details/21776009 最近调试原来的微信模拟登陆时发生了“基础连接已关闭,发送时发生错误”的错误提示,原来都是好好的,只是很久没用了. 出错代码如下: HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&la

要求已打开且可用的 Connection。连接的当前状态为已关闭。

C#使用OleDB操作ACCESS Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + NewFileName + ";User Id=uid;Jet OLEDB:Database Password=pwd;"; 完整错误信息: {System.InvalidOperationException: ExecuteScalar 要求已打开且可用的 Connection.连接的当前状态为已关闭. 在 System.Data.OleDb