SpringBoot宣告式事務的簡單運用
關於事物的基本概念等這裡就不介紹了。
Spring宣告式事物的實現,有兩種方式;第一種是配置xml,第二種是使用相關注解(這兩種方式可詳見《程式設計師成長筆記(一)》的相關章節)。
SpringBoot中預設配置了第二種方式,所以,SpringBoot直接使用註解即可。下面介紹SpringBoot通過註解開啟事物的使用。
SpringBoot使用事物的步驟:
第一步:在啟動類上開啟事物支援
示例:
第二步:在業務邏輯層介面的實現類中的相關方法上宣告事物
示例:
給出Transactional 註解的常用屬性表:
屬性 |
說明 |
propagation |
事務的傳播行為,預設值為 REQUIRED。 |
isolation |
事務的隔離度,預設值採用 DEFAULT |
timeout |
事務的超時時間,預設值為-1,不超時。 如果設定了超時時間(單位秒),那麼如果超過該時間限制了但事務還沒有完成,則自動回滾事務。 |
read-only |
指定事務是否為只讀事務,預設值為 false;為了忽略那些不需要事務的方法,比如讀取資料,可以設定 read-only 為 true。 |
rollbackFor |
用於指定能夠觸發事務回滾的異常型別,如果有多個異常型別需要指定,各型別之間可以通過逗號分隔。{xxx1.class, xxx2.class,……} |
noRollbackFor |
丟擲 no-rollback-for 指定的異常型別,不回滾事務。{xxx1.class, xxx2.class,……} |
…… |
注意事項
◎ service實現類(一般不建議在介面上)上新增@Transactional,可以將整個類納入spring事務管理,在每個業務方法執行時都會開啟一個事務,不過這些事務採用相同的管理方式
◎ Transactional 註解只能應用到 public 可見度的方法上。 如果應用在protected、private或者 package可見度的方法上,也不會報錯,不過事務設定不會起作用。
◎ 預設情況下,Transactional 註解的事物所管理的方法中,如果方法丟擲執行時異常或error,那麼會進行事務回滾;如果方法丟擲的是非執行時異常,那麼不會回滾。
注:SQL異常屬於檢查異常,但是有時我們寫SQL時,檢查異常並不會提示;而預設情況下,事物對檢查異常不會作出回滾處理。
注:有的框架將SQL異常重寫為了執行時異常。
注:在很多時候,我們除了catch一般的異常或自定義異常外,我們還習慣於catch住Exception異常;然後再丟擲Exception異常。但是Exception異常屬於非執行時異常(即:檢查異常),因為預設是執行時異常時事物才進行回滾,多以這種情況下,是不會回滾的。我們可以在@Transacional註解中,通過rollbackFor = {Exception.class} 來解決這個問題。即:設定當Exception異常或Exception的所有任意子類異常時事物會進行回滾。
注:被catch處理了的異常,不會被事物作為判斷依據;如果異常被catch 了,但是又在catch中丟擲了新的異常,那麼事物會以這個新的異常作 為是否進行回滾的判斷依據。
事務的傳播機制(行為):
事務的傳播行為是指,如果在開始當前事務之前,一個事務上下文已經存在,此時有若干選項可以指定一個事務性方法的執行行為。
即:在執行一個@Transactinal註解標註的方法時,開啟了事務;當該方法還在執行中時,另一個人也觸發了該方法;那麼此時怎麼算事務呢,這時就可以通過事務的傳播機制來指定處理方式。
在TransactionDefinition定義中包括瞭如下幾個表示傳播行為的常量:
常量 |
含義 |
TransactionDefinition.PROPAGATION_REQUIRED |
如果當前存在事務,則加入該事務;如果當前沒有事務,則建立一個新的事務。這是預設值。 |
TransactionDefinition.PROPAGATION_REQUIRES_NEW |
建立一個新的事務,如果當前存在事務,則把當前事務掛起。 |
TransactionDefinition.PROPAGATION_SUPPORTS |
如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續執行。 |
TransactionDefinition.PROPAGATION_NOT_SUPPORTED |
以非事務方式執行,如果當前存在事務,則把當前事務掛起。 |
TransactionDefinition.PROPAGATION_NEVER |
以非事務方式執行,如果當前存在事務,則丟擲異常。 |
TransactionDefinition.PROPAGATION_MANDATORY |
如果當前存在事務,則加入該事務;如果當前沒有事務,則丟擲異常。 |
TransactionDefinition.PROPAGATION_NESTED |
如果當前存在事務,則建立一個事務作為當前事務的巢狀事務來執行;如果當前沒有事務,則該取值等價於TransactionDefinition.PROPAGATION_REQUIRED。 |
這是對以前做的部分筆記的進一步完善,之前做筆記的時候,還參考了一些部落格, 時間太久不記得連結了,如果有任何侵權問題,請聯絡我。
如有不當之處,歡迎指正
本文已經被收錄進《程式設計師成長筆記(二)》,作者JustryDeng
相關推薦
SpringBoot宣告式事務的簡單運用
關於事物的基本概念等這裡就不介紹了。 Spring宣告式事物的實現,有兩種方式;第一種是配置xml,第二種是使用相關注解(這兩種方式可詳見《程式設計師成長筆記(一)》的相關章節)。 SpringBoot中預設配置了第二種方式,所以,SpringBoot直接使用註解即可。下
SpringBoot 宣告式事務
springboot的事務也主要分為兩大類,一是xml宣告式事務,二是註解事務. 可以使用 @ImportResource("classpath:transaction.xml") 引入該xml的配置,xml的配置如下?1234567891011121314151617181
springboot(三) springboot開啟宣告式事務
版權宣告:本文為博主原創文章,歡迎轉載,轉載請註明作者、原文超連結 ,博主地址:http://blog.csdn.net/forezp。 https://blog.csdn.net/forezp/article/details/70833629 轉載請標明出處: http://blog.csdn.n
springboot開啟宣告式事務
springboot開啟宣告式事務 轉載http://blog.csdn.net/forezp/article/details/70833629 springboot開啟事務很簡單,只需要一個註解@Transactional 就可以了。因為在springboot中已經預設對jp
SpringBoot 註解事務宣告式事務
springboot對新人來說可能上手比springmvc要快,但是對於各位從springmvc轉戰到springboot的話,有些地方還需要適應下,尤其是xml配置。我個人是比較喜歡註解➕xml是因為看著方便,查詢方便,清晰明瞭。但是xml完全可以使用註解代替,今天就扒
springboot xml宣告式事務管理方案
開發十年,就只剩下這套架構體系了! >>>
延遲載入、快取、spring與宣告式事務
什麼是延遲載入 延遲載入又稱(懶載入) resultMap中的 association 和 collection 標籤就具有延遲載入的功能(一對一,一對多的關係自帶延遲載入,在開發裡面最常用的) - 作用是:什麼時候用什麼時候載入 設定延遲載入 <!
宣告式事務管理三:基於註解的配置
這種基於註解配置的宣告式事務管理方法式很簡單,很方便 (1) 像之前一樣恢復到初始狀態 (2) 配置事務管理器(注入連線池) (3) 開啟註解
宣告式事務管理二:基於AspectJ的xml配置
下面講述的是宣告式事務管理的第二種方法,是基於AspectJ的xml配置的 (1) 引入AspectJ的java包(一種簡化的操作)並copy到web-INF (2) 配置事務管理器 &n
宣告式事務管理一:TransactionProxyFactoryBean
下面是宣告式事務管理的第一種方法使用原始的TransactionProxyFactoryBean,這種方法以後用的比較少,因為當事務管理比較複雜之後,相應的配置也會變得很複雜
Spring Boot(四)開啟宣告式事務
簡介 以前用Spring想要用事務的時候,都需要自己在spring的配置檔案中配置事務管理器。而Spring Boot則預設對jpa,jdbc,mybatis開啟了事務,引入他們的依賴的時候,事務就開啟了。使用事務只需要一個@Transactional註解就可以了。 準備 以上一篇文章【
Spring 程式設計式事務 宣告式事務
程式設計式事務通用類: import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.datasource.DataSourceTransactionManager
第十二講:12,spring宣告式事務管理-註解式
1,複製專案spring404 ,改名spring404-3。修改BankServiceImpl類,添加註解,package com.cruise.service.impl;import org.springframework.transaction.annotation.Tra
第十一講:11.spring宣告式事務管理-xml方式
1,複製專案spring404 ,改名spring404-2,修改BankServiceImpl類,刪除宣告式事務的程式碼。宣告式事務管理的方式缺點是,事務程式碼嚴重嵌入邏輯程式碼中 package com.cruise.service.impl; import org.springframewor
Java程式設計師從笨鳥到菜鳥之(八十)細談Spring(九)spring+hibernate宣告式事務管理詳解
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
spring宣告式事務管理方式( 基於tx和aop名字空間的xml配置[email
轉自:https://www.cnblogs.com/niceyoo/p/8732891.html 1. 宣告式事務管理分類 宣告式事務管理也有兩種常用的方式, 一種是基於tx和aop名字空間的xml配置檔案,另一種就是基於@Transactional註解。 顯然基於註解的方式更簡單
淺談spring事務管理的2種方式:程式設計式事務管理和宣告式事務管理;以及@Transactional(rollbackFor=Exception.class)註解用法
事務的概念,以及特性: 百度百科介紹: ->資料庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。 事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過
事務宣告宣告式事務和程式設計式事務介紹
事務宣告宣告式事務和程式設計式事務介紹 轉載出處 https://blog.csdn.net/u013083576/article/details/51754567 程式設計式事務:所謂程式設計式事務指的是通過編碼方式實現事務,即類似於JDBC程式設計實現事務管理。管理使用Transacti
使用註解實現Spring的宣告式事務管理
使用註解實現Spring的宣告式事務管理,更加簡單! 步驟: 1) 必須引入Aop相關的jar檔案 2) b
spring_(23)Spring_事務準備和宣告式事務md
事務簡介 事務管理是企業級應用程式開發中必不可少的技術,用來確保資料的完整性和一致性。 事務就是一系列的動作,它們被當做一個單獨的工作單元。這些動作要麼全部完成,要麼全部不起作用。 事務的四個關鍵屬性(ACID) 原子性(atomicity):事務