Spring中的事務總結

2021-10-05 04:48:15 字數 3518 閱讀 9695

spring 支援的事務策略,包括兩種

spring boot 的事務原理

兩種事務管理方式: 全面分析spring的程式設計式事務和宣告式事務

>

......

"bankservicetarget"

class

="footmark.spring.core.tx.declare.classic.bankserviceimpl"

>

name

="bankdao"

ref="bankdao"

/>

bean

>

"bankservice"

class

="org.springframework.transaction.interceptor.transactionproxyfactorybean"

>

name

="target"

ref="bankservicetarget"

/>

name

="transactionmanager"

ref="transactionmanager"

/>

name

="transactionattributes"

>

>

key=

"transfer"

>

propagation_requiredprop

>

props

>

property

>

bean

>

......

beans

>

基於 和 命名空間的宣告式事務管理是目前推薦的方式,其最大特點是與 spring aop 結合緊密,可以充分利用切點表示式的強大支援,使得管理事務更加靈活。

>

......

"bankservice"

class

="footmark.spring.core.tx.declare.namespace.bankserviceimpl"

>

name

="bankdao"

ref="bankdao"

/>

bean

>

<

tx:adviceid=

"bankadvice"

transaction-manager

="transactionmanager"

>

<

tx:attributes

>

<

tx:method

name

="transfer"

propagation

="required"

/>

tx:attributes

>

tx:advice

>

<

aop:config

>

<

aop:pointcutid=

"bankpointcut"

expression

="execution(* *.transfer(..))"

/>

<

aop:advisor

advice-ref

="bankadvice"

pointcut-ref

="bankpointcut"

/>

aop:config

>

......

beans

>

基於 @transactional 的方式將宣告式事務管理簡化到了極致。透徹的掌握 spring 中的 @transactional ; @enabletransactionmanagement 的使用。spring boot 使用事務非常簡單,首先使用註解 @enabletransactionmanagement 開啟事務支援後,然後在訪問資料庫的service方法上新增註解 @transactional 便可。

//啟註解事務管理,等同於xml配置方式的 

@enabletransactionmanagement

public

class

public

static

void

main

(string[

] args)

}

// service層

@transactional

(propagation = propagation.required,readonly=

true

)public

boolean

transfer

(long fromid, long toid, double amount)

@transactional 註解的屬性說明

屬性名說明

name

當在配置檔案中有多個 transactionmanager , 可以用該屬性指定選擇哪個事務管理器。

propagation

事務的傳播行為,預設值為 required:如果當前存在事務,則加入該事務;如果當前沒有事務,則建立新的事務執行。propagation_supports:如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續執行。propagation_not_supported:以非事務方式執行,如果當前存在事務,則把當前事務掛起。propagation_never:以非事務方式執行,如果當前存在事務,則丟擲異常。

isolation

事務的隔離度,預設值採用 default。

timeout

事務的超時時間,預設值為-1。如果超過該時間限制但事務還沒有完成,則自動回滾事務。

read-only

指定事務是否為唯讀事務,預設值為 false;為了忽略那些不需要事務的方法,比如讀取資料,可以設定 read-only 為 true。

rollback-for

用於指定能夠觸發事務回滾的異常型別,如果有多個異常型別需要指定,各型別之間可以通過逗號分隔。預設情況下,如果在事務中丟擲了未檢查異常(繼承自 runtimeexception 的異常)或者 error,則 spring 將回滾事務;除此之外,spring 不會回滾事務。如果在事務中丟擲其他型別的異常,並期望 spring 能夠回滾事務,可以指定 rollbackfor

no-rollback- for

丟擲 no-rollback-for 指定的異常型別,不回滾事務。

常見問題

jpa 丟擲異常: transaction rolled back because it has been marked as rollback-only"

同一類中的方法自呼叫問題

在spring的文件中說道,spring宣告式事務管理預設對非檢查型異常和執行時異常進行事務回滾,而對檢查型異常則不進行回滾操作

spring 事務的總結

1.初識事務 事務就是對資料資源進行可控的一組訪問操作。為保證事務執行前後,資料資源所承載的系統狀態所處於正確的狀態,事務本身有四個屬性 原子 性,一致性,隔離性和永續性。原子性 原子性要求所有操作是乙個整體,要麼全部提交,要麼全部失敗。一致性 要求事務對資料資源執行一致性檢查,事務提交之前是處於某...

spring事務總結

1.spring中被標有 transactional註解 也就是事務 的方法不能夠自己呼叫自己。2.在同乙個service實現類中,不同的方法之間可以相互呼叫。3.spring框架的事務基礎架構 將預設地只在丟擲執行時和unchecked exceptions時才標識事務回滾。也就是說,當丟擲乙個 ...

spring 事務總結

tx是由aop實現的 aop的實現方式 1 方式 spring aop 1.jdk的基於介面方式 2.cglib的基於類的方式 修改位元組碼,加入extend 類?這兩種 方式 都存在父子關係,也跟日常生活中的 一樣。具體可以參考動態 模式 2 非 aspectj?這貨沒用 實現?有空看看cglib...