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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章