
@Transactional(readOnly=true)就可以把事務方法設定成只讀事務,設定了只讀事務,事務從開始到結束,將看不見其他事務所提交的資料,這在某種程度上解決了事務并發的問題,一個方法內,如果沒有對資料庫insert、update、delete的操作,那么,這個事務方法是可以設定成readOnly=true,
事務方法設定成只讀事務,會發生什么?
1、只讀事務方法內,資料庫的操作只能是讀取資料,
如果只讀事務方法內有對資料庫進行insert、update、delete的操作,則會報例外,
Connection is read-only. Queries leading to data modification are not allowed
2、只讀事務方法內,多次呼叫同一個方法,查詢結果都一樣,不會受到并發事務的影響,
如果只讀事務方法內,多次呼叫同一個方法,查詢結果將會使用第一次查詢的快取,但是,如果呼叫的不是同一個方法(即使這兩個方法里的select陳述句是一模一樣),多次呼叫方法得到的查詢結果就會受到并發事務的影響,也就是說,如果多次呼叫不同的方法(即使這兩個方法里的select陳述句是一模一樣),多次呼叫期間,如果有其他事務修改了資料并提交了,就會得出不一樣的查詢結果,
3、只讀事務方法內,ORM框架會對其進行查詢優化,
由于只讀事務不存在資料的修改,因此資料庫將會為只讀事務提供一些優化手段,例如Oracle對于只讀事務,不啟動回滾段,不記錄回滾log,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/510976.html
標籤:其他
