現象:在進行壓測的時候,出現了數據庫連接數被用完的情況
經過日誌分析,發現是因爲在一個線程業務啓動後,在首次開啓事務後,並沒有在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