Spring事務與自定義多線程陷阱

場景:Spring+Ibatis環境,使用spring aop事務(配置到service層),在一個service方法中,自定義了一個多線程,結果事務不起作用了,不用線程,則事務有效。

        原因:Spring的事務是通過ThreadLocal來保證線程安全的,事務和當前線程綁定,所以自己開了多線程自然會讓事務失效。

        Spring的事務管理器是通過ThreadLocal來保存每個線程的副本,從而實現線程安全的,再結合IoC和Aop實現高級聲明式事務的功能,所以Spring的事務天然地和線程有着千絲萬縷的聯繫。只能維護web應用的多線程,不支持多線程裏的多線程。

        其他方案:修改代碼架構,把邏輯處理部分抽出來,放在另外一個service中,然後通過xxx.service的方法去調用(在事務範圍外做的線程操作),這樣就有了事務。 


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