springBoot service層 事務控制

2022-09-17 03:45:13 字數 2382 閱讀 9231

@transactional屬性 

屬性型別

描述value

string

可選的限定描述符,指定使用的事務管理器

propagation

enum: propagation

可選的事務傳播行為設定

isolation

enum: isolation

可選的事務隔離級別設定

readonly

boolean

讀寫或唯讀事務,預設讀寫

timeout

int (in seconds granularity)

事務超時時間設定

rollbackfor

class物件陣列,必須繼承自throwable

導致事務回滾的異常類陣列

rollbackforclassname

類名陣列,必須繼承自throwable

導致事務回滾的異常類名字陣列

norollbackfor

class物件陣列,必須繼承自throwable

不會導致事務回滾的異常類陣列

norollbackforclassname

類名陣列,必須繼承自throwable

不會導致事務回滾的異常類名字陣列

用法:

@transactional 可以作用於介面、介面方法、類以及類方法上。當作用於類上時,該類的所有 public 方法將都具有該型別的事務屬性,同時,我們也可以在方法級別使用該標註來覆蓋類級別的定義。

雖然 @transactional 註解可以作用於介面、介面方法、類以及類方法上,但是 spring 建議不要在介面或者介面方法上使用該註解,因為這只有在使用基於介面的**時它才會生效。另外, @transactional 註解應該只被應用到 public 方法上,這是由 spring aop 的本質決定的。如果你在 protected、private 或者預設可見性的方法上使用 @transactional 註解,這將被忽略,也不會丟擲任何異常。

預設情況下,只有來自外部的方法呼叫才會被aop**捕獲,也就是,類內部方法呼叫本類內部的其他方法並不會引起事務行為,即使被呼叫方法使用@transactional註解進行修飾。

註解在方法上:

@autowired  

private

mybatisdao dao;

@transactional

@override

public

void

insert(test test)

@transactional(norollbackfor=runtimeexception.class

) @override

public

void

insert(test test)

@transactional(propagation=

propagation.not_supported)

@override

public

void

insert(test test)

註解在類上:當作用於類上時,該類的所有 public 方法將都具有該型別的事務屬性

@transactional

public

class mybatisserviceimpl implements

mybatisservice

注意:有時候在開發時往往出現了新增註解後卻無法回滾

原因:預設spring事務只在發生未**獲的 runtimeexception 時才回滾。  

spring aop  異常捕獲原理:被攔截的方法需顯式丟擲異常,並不能經任何處理,這樣aop**才能捕獲到方法的異常,才能進行回滾,預設情況下aop只捕獲 runtimeexception 的異常,但可以通過配置來捕獲特定的異常並回滾  

換句話說在service的方法中不使用try catch 或者在catch中最後加上throw new runtimeexcetpion(),這樣程式異常時才能被aop捕獲進而回滾。

解決方案:

1.在service層方法丟擲runtimeexception異常(如在catch中需要拋出自定義的異常則只需自定義異常繼承runtimeexception即可),並繼續捕獲和處理這個異常。

2.在service層方法的catch語句中增加:

transactionaspectsupport.currenttransactionstatus().setrollbackonly();

語句,手動回滾,這樣上層就無需去處理異常。

PCIe匯流排事務層

在介紹事務層之前,首先簡單地了解一下pcie匯流排的通訊機制。假設某個裝置要對另乙個裝置進行讀取資料的操作,首先這個裝置 稱之為requester 需要向另乙個裝置傳送乙個request,然後另乙個裝置 稱之為completer 通過completion packet返回資料或者錯誤資訊。在pcie...

dao層 service層 事務的理解

dao層 對應資料最底層操作,一般來說,乙個資料庫table對應乙個dao,單錶操作。service層 把客戶多方面要求進行彙總,對外只有引數即可,至於服務層操作多少個dao與客戶無關。事務四大特性 1.原子性 原子性是指事務是乙個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。2.一致性...

業務層與事務控制

業務層應該不應該出現事務控制 這個問題已經在業界達成共識 業務層絕對不應該出現事務控制 嚴格的說不應該出現與業務無關的 在aop沒有出現以前是怎樣控制的呢?似乎沒有很好的方法 但是隨著spring的出現aop的風靡 這個問題得到了比較優雅的解決 例如 有業務方法 bizmethod 要對這個方法加上...