Spring如何管理事物的?


Spring如何管理事物的?

1 spring事務在操作過程中 起初會去連接池中獲取一個數據庫鏈接
2獲取到了鏈接之后會修改數據庫的提交方式為手動提交,我們都知道mysql與oracle的事務隔離級別不同,提交的方式也不同,mysql你執行一條語句它自動幫你commit了,所以要修改為手動提交,

默認的:
begin
select 列1,列2,from 表明
commit:
end
修改之后的:
begin
select 列1,列2,from 表明
select ....多條sql執行但未提交

我們可以看到,在修改之后的代碼當中,我們並沒有提交commit,所以可以進行回滾操作,
當我們執行邏輯成功之后,程序執行commit操作,
3以上操作配合着spring動態代理對象中實現即可完成。

為什么同樣的資源你的經理能寫500並發你只能寫200個?

首先我們需要了解一下編程式事物與聲明試事物有什么區別?

一 聲明試事物

聲明試事物就只能加在方法上,在方法上增加了聲明試事物之后該方法就擁有了事物的 原子性,
方法內部出現錯誤全部回滾,執行成功則全部提交,但是 該事物性能太差 如果你調用第三方服務處理其他邏輯,當前事物會一直在等待
那么你的數據庫鏈接資源不會被釋放掉,別人也不會get到你的數據庫鏈接資源
如果有很多個這樣的請求你的數據庫連接池資源將全部被消耗掉
二 編程式事物
可以在方法內部中使用,可以把方法內部的代碼 按照邏輯分成單元提交,如果你去調用第三方服務處理其他邏輯,可以先把之間的單元提交讓數據庫鏈接資源釋放掉,這樣其他請求就可以迅速get到資源事物,
但是你要考慮的是,該事物的缺點是如果出現錯誤將需要人手動修補數據,所以每個單元的操作必須記錄相應的日志並且整體記錄狀態,
事物總結:
1兩個事物操作的粒度不一樣,應用場景不一樣,編程式事物可以迅速的處理完成並釋放資源,在同樣的資源下實現了高可用高並發,效率會比聲明試事物快N多倍,

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM