spring4+mybatis出现AOP方法结束后,事务不释放连接,导致连接数被用完的案例分析

现象:在进行压测的时候,出现了数据库连接数被用完的情况

经过日志分析,发现是因为在一个线程业务启动后,在首次开启事务后,并没有在AOP的方法结束后进行释放,而是一直到线程结束才释放了连接。

日志如下图所示:

经过分析,一开始以为是出现了锁的问题,但是经过业务上和日志的排查,并没有发现并发死锁的现象。后来排查了Spring AOP的设置,只有propagation的属性为REQURES_NEW和NOT_SUPPORTE时,才会出现“挂起”。但是并未使用这两种配置项,只有REQURED和SUPPORTS。之后,在网上找有没有人遇到过相同的问题,可是总是药不对症。之后就是源码分析,再结合日志看到的问题。终于找到了原因:

在Spring的AOP配置中有这么一句:

<tx:method name="*" propagation="SUPPORTS" />

自此之后,LT测试变得一片祥和景象

参考:http://www.mybatis.org/spring/

http://www.mybatis.org/mybatis-3/

http://blog.csdn.net/pianistofsoftware/article/details/52513757

http://blog.csdn.net/id19870510/article/details/78883741

http://blog.csdn.net/qq_29346449/article/details/51115612

https://my.oschina.net/u/1166271/blog/201196

https://my.oschina.net/realfighter/blog/366089

https://www.cnblogs.com/chihirotan/p/6592759.html





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值