Spring 事務 Transaction 開發實踐

Spring 事務管理:

  • 編程式
  • 注解式

事務的傳播機制

@Transactional(propagation=xx),選項如下:

  • Propagation.SUPPORTS:如果調用的 bean 中開啟了事務,則加入事務,否則就不用事務。

  • Propagation.NOT_SUPPORTED:不開啟事務。

  • Propagation.REQUIRED:(默認形式)如果調用的 bean 中開啟了事務,則加入事務,否則就新建事務。

  • Propagation.REQUIRES_NEW:如果調用的 bean 中開啟了事務,則原來的事務掛起,新建事務,否則就新建事務。

  • Propagation.MANDATORY:必須在一個 已有 的事務中執行,否則拋出異常。

  • Propagation.NEVER:與 MANDATORY 相反,必須在一個 沒有 的事務中執行,否則拋出異常。

事務的超時設置

@Transactional(timeout=30) 設置為 30 秒
默認為 -1 秒,即永不超時。

事務的隔離級別

設置底層數據庫的隔離級別,用于處理 多事務并發 的情況。

參見 數據庫隔離級別 臟讀 VS 不可重讀讀 VS 幻讀

@Transactional(isolation=xx),選項如下:

  • Isolation.READ_UNCOMMITTED:讀取未提交的數據。會產生臟讀。

  • Isolation.READ_COMMITTED:(SQL Server 默認形式)讀取已提交的數據。

  • Isolation.REPEATABLE_READ:(MySQL 默認形式)可重復讀。

  • Isolation.SERIALIZABLE:將并發事務串行化處理。

Spring 事務 Transaction 開發實踐

配置數據源 dataSource

<bean id="dataSource" class="C3P0數據源">
  ...
</bean>

通過 dataSource 配置 TransactionManager

<bean id="transactionManager" class="DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
</bean>

<tx: annotation-driver transaction-manager="transactionManager" />

通過 注解 來使用

@Transactional(propagation=Propagation.REQUIRES_NEW)
public void saveUserInfo(User user) {
  ...
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 很多人喜歡這篇文章,特此同步過來 由淺入深談論spring事務 前言 這篇其實也要歸納到《常識》系列中,但這重點又...
    碼農戲碼閱讀 4,775評論 2 59
  • 原文:http://www.cnblogs.com/younggun/archive/2013/07/16/319...
    Feng_Sir閱讀 803評論 0 3
  • 事務有四個特性:ACID 原子性(Atomicity):事務是一個原子操作,由一系列動作組成。事務的原子性確保動作...
    jiangmo閱讀 1,252評論 0 7
  • 羽絨服到了 很欣喜 有四個空間很大的兜 這樣的話 就不會嫌兜小放不下手了吧 又忽然想起 這個冬天 已經沒有非把手放...
    笑長日記閱讀 274評論 0 0
  • delegate 特殊--內存警告的時候
    哎呦哎呦小葵花閱讀 178評論 0 0