@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註解進行修飾。
註解在方法上:
@autowiredprivate
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 方法將都具有該型別的事務屬性
@transactionalpublic
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 要對這個方法加上...