上篇文章給大家詳細的介紹Spring中事務的傳播行為,在事務中我們需要關注事務的傳播行為和事務的隔離級别這兩個點,是以本文給大家介紹下事務的隔離級别
事務的隔離級别
事務隔離級别指的是一個事務對資料的修改與另一個并行的事務的隔離程度,當多個事務同時通路相同資料時,如果沒有采取必要的隔離機制,就可能發生以下問題:

再必須強調一遍,不是事務隔離級别設定得越高越好,事務隔離級别設定得越高,意味着勢必要花手段去加鎖用以保證事務的正确性,那麼效率就要降低,是以實際開發中往往要在效率和并發正确性之間做一個取舍,一般情況下會設定為READ_COMMITED,此時避免了髒讀,并發性也還不錯,之後再通過一些别的手段去解決不可重複讀和幻讀的問題就好了。
Spring設定事務隔離級别
配置檔案的方式
<tx:advice id="advice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="fun*" propagation="REQUIRED" isolation="DEFAULT"/>
</tx:attributes>
</tx:advice>
注解的方式
@Transactional(isolation=Isolation.DEFAULT)
public void fun(){
dao.add();
dao.udpate();
}
總結
Spring建議的是使用DEFAULT,就是資料庫本身的隔離級别,配置好資料庫本身的隔離級别,無論在哪個架構中讀寫資料都不用操心了。而且萬一Spring沒有把這幾種隔離級别實作的很完善,出了問題就麻煩了。