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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xueyepiaoling/article/details/79392883

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

经过日志分析,发现是因为在一个线程业务启动后,在首次开启事务后,并没有在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





展开阅读全文

没有更多推荐了,返回首页