一、背景
在使用mango时,测试环境遇到了一种奇怪的问题,程序测试一段时间之后,连接断开了,导致数据库查询失败。
二、原因
由于使用了事务,在发生异常之后,事务没有提交。已经开始了事务,但是在开始事务的时候,设置了事务提交为非自动,在发生异常之后,连接一直是使用状态,最后导致连接池中的连接都耗尽,无可用连接使用。连接在一段时间内没有执行完,会超时断开。在使用mysql5版本之后,设置autoConnect=true不起作用,导致连接池中所有的连接都断开了。
三、原理分析
事务处理的原理,1.获取数据库连接,2.设置事务不自动提交,3.执行curd,4、提交事务,5、关闭连接
在使用数据库连接池的时候,连接不会断开,而是会有活跃状态变为闲置状态。