spring隔離級別和aop基礎 md

2021-10-05 22:18:49 字數 2180 閱讀 2082

spring

a.spring事務隔離級別

​ 說到事務隔離級別就要知道 什麼是事務 事務必須服從**acid**原則 通俗理解,事務其實就是一系列指令 的集合 事務特徵有四點

​ 1.原子性 (atomicity) 操作這些指令時,要麼全部執行成功,要麼全部不執行。只要其中乙個指令執 行失敗 所有的指令都執行失敗,資料進行回滾,回到執行指令前的資料狀態

​ 2.一致性(consistency)事務的執行使資料從乙個狀態轉換為另乙個狀態,但是對於整個資料的完整性保持穩定

​ 3.隔離性(isolation)在該事務執行的過程中,無論發生的任何資料的改變都應該只存在於該事務之中,對外界不存在任何影響。只有在事務確定正確提交之後,才會顯示該事務對資料的改變。其他事務才能獲取到這些改變後的資料。

​ 4.永續性(durability)當事務正確完成後,它對於資料的改變是永久性的。即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。

為什麼要進行是事務隔離

​ 當多個認為併發訪問資料庫執行認為過程中 如果有一些子任務出現***異常*** 只是回滾那些出現異常的任務而不是整個任務 如何實現這一功能呢

​ 隔離性(isolation)作為事務特性的乙個關鍵特性,它要求每個讀寫事務的物件 對其他事務的操作物件能相互分離,即該事務提交前對其他事務都不可見,在資料庫層面都是使用鎖來實現。

事務隔離級別有四種 從低到高

​ 1.read uncommitted(未提交讀):最低隔離界別 基本什麼都不解決 允許讀取未被事務提交的變更資料 會出現髒讀,幻讀,不可重複讀等問題

​ 2.read committed(讀已提交資料):允許讀取已被其他事物提交的變更資料 可避免髒讀 不可避免幻讀等問題

​ 3.repeatable read(可重複讀):確保事務多次讀取相同的值 在事務執行時間 會禁止其他事務對字段的變更 可避免髒讀和不可重複讀 仍可能 出現幻讀

​ 4.serializable(序列化):確保事務從乙個表中讀取相同的資料 執行起間 禁止其他事務對改字段的操作 可避免所以併發問題 但效能低

b.事務的七種傳播行為

**1傳播行為**:在spring中,當乙個方法呼叫另外乙個方法時,可以讓事務採取不同的策略工作,如新建事務或者掛起當前事務等,這便是事務的傳播行為。
在spring的事務機制中對資料庫存在7種傳播行為

​ 比如說required 它支援當前事務 如果沒有當前事務 方法將在該事務中執行否則會啟動乙個新的事務

​ 還有supports 如果沒有事務就以非事務執行 不需要事務的上下文

​ 還有mandatory 如果沒有事務 就丟擲異常

​ not_supported 就是非事務執行 如果存在當前事務 就在該方法執行區間 當前任務將被掛起

​ 還有never 以非事務方式執行 如果當前事務正在執行 則會丟擲異常

​ 還有個requires_new 就是支援乙個內嵌的一事務過程

c.spring aop(面向切面程式設計)

​ 主要實現方式有比如許可權判斷 日誌統計的一些操作等 就是寫好的業務塊 想要加入一些比如日誌許可權等操作 將這類與業務無關的**塊動態的植入到這個業務的方法前或方法後 這就是乙個面向切面程式設計

aop實現的是一種動態** 一種是jdk的proxy 第二種就是cglib 他倆也是有一點區別的

jdk的proxy可以生成語言介面 就是語言實現相同介面的乙個類 是通過反射來接受被**的類 並且要求被來歷的類必須實現乙個介面 如果目標類沒有實現介面 那麼 就會使用cglib來是動態**目標類

cglib來是動態** 他會使用一種位元組碼的編譯器(asm的乙個編譯器) 是乙個**生成的類庫 可以再執行動態的生成某個類的子類 他是以通過繼承的方式做動態**的 所以如果某個類被標記為final 那麼它是無法使用cglib做動態**的

效能上來說cglib在建立物件的過程中 可能會做的更慢一點 但是在執行時可能效率會高一點

擴充套件 反射

執行時獲取到物件或集合泛型這麼乙個執行時的這個型別打到它釣魚台的乙個業務的實體類 去放置他的一些資訊

反射可以獲取到執行的一些狀態 所以能夠達到**的復用過程 (動態獲取)

反射的效能在大多數情況下並沒有那麼好:

他會先去方法區裡面看它這個類是否被載入過 如果沒有的話 會有類載入的這麼乙個過程

反射是一種解釋操作 需要去告訴jvm 希望他怎麼做 比我們直接去寫** 直接操作會慢一點在一定程度上影響到這個效能

Spring隔離級別

例 張三賬戶餘額1000 此時有a b事務對張三餘額操作 1.讀未提交 髒讀 乙個事務可以讀取到另乙個事務未提交的資料。a執行 500,此時還未提交,b讀取到餘額1500,購買了1500塊錢的東西,購買成功了 此時a異常回滾 平台損失了500 2.讀已提交 不可重複讀 乙個事務可以讀取到另乙個事務已...

spring事務隔離級別

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

Spring 事務隔離級別

資料庫事務的隔離級別有4種,由低到高分為為read uncomitted,read comitted,repeatable read serializable,而且,在事務的併發操作中可能會出現髒讀,不可重複度,虛讀 幻讀 髒讀 read uncomitted 什麼都防不住 乙個事務讀到另外乙個事務...