Spring事務配置 隔離設定的經驗總結

2021-09-02 10:31:19 字數 742 閱讀 5685

關於spring的事務配置,絕對是乙個老話題了;關注最多的也就是transactional裡的propagation,isolation;相關論述各種論壇都重複重複再重複,不累贅了,不過推薦大家可以檢視spring原始碼:

org.springframework.transaction.annotation.transactional;原始碼內對這兩個屬性的列舉進行了說明(當然是英文的);值得注意的是,乙個完善、可靠、健壯的系統,事實上對timeout,rollbackfor,norollbackfor屬性也是根據實際場景各有不同的;實際開發中,過多的人根本不關注只會使用預設值了,甚至對於propagation和isolation也是;當然確實大部分業務可能不用關心這些,全預設既ok;

如上配置是一般應用對全域性的aop事務配置;實際經驗告訴我們實戰中通常都是aop事務配合註解事務的;

很容易理解的就像是request與session的關係一樣,註解會優先於aop事務配置;完美的解決專案中的點麵問題(整個面的aop配置,區域性點用註解)

@transactional(propagation=propagation.mandatory,readonly=true,timeout=600000)

值得注意的是timeout的預設值是-1,既沒有超時,在高併發高tps的業務請求中你會發現根據實際情況設定下timeout會讓你的系統更可靠,不至於高壓力至崩潰等情況,特別是這個請求可能較耗時時;根據對請求的估時(呼叫外部介面時間估時)設定timeout,有效降低系統壓力風險,使用者體驗也不會太差;

spring事務的隔離

isolation default 使用資料庫預設的事務隔離級別 isolation read uncommitted 允許讀取尚未提交的修改,可能導致髒讀 幻讀和不可重複讀 isolation read committed 允許從已經提交的事務讀取,可防止髒讀 但幻讀,不可重複讀仍然有可能發生 i...

Spring事務隔離等級

首先了解事務訪問資料庫讀取資料會出現的情況 1 髒讀 dirty reads 事務a的未提交 還依然快取 的資料被事務b讀走,此時事務a提交失敗,資料回滾,會導致事務b所讀取的的資料是快取中的錯誤資料。2 不可重複讀 non repeatable reads 在a事務內,多次讀同一資料。a事務還沒有...

spring事務隔離級別

在spring中定義了5中不同的事務隔離級別 1.isolation default 一般情況下使用這種配置既可 這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別。2.isolation read uncommitted 4 p l.i f k...