spring事務和synchronized同時使用導致同步無效問題的解決辦法

一、問題原因
原因是首先spring事務是使用spring aop實現
在這裏插入圖片描述
可以看到提交事務是在方法調用之後,如果用synchronized對方法加鎖,當方法剛好執行完,釋放了鎖,另一個線程進入時當前事務還沒提交導致同步失敗。如果事務隔離級別設置恰當也不需要synchronized來保證數據同步。

二、解決方法
1、synchronized在事務方法的上一層鎖住。
例如:

public synchronized void father(){
	children();
}
@Transactional
public void children(){
	//do something
}

2、取消synchronized,通過改變事務的隔離級別解決,使用ISOLATION_SERIALIZABLE鎖表

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