现象:在进行压测的时候,出现了数据库连接数被用完的情况
经过日志分析,发现是因为在一个线程业务启动后,在首次开启事务后,并没有在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