1. 程式人生 > >Spring事務對何種異常回滾

Spring事務對何種異常回滾

結論

Spring的事務管理預設只對出現執行期異常(java.lang.RuntimeException及其子類)進行回滾。若一個方法丟擲Exception或者Checked異常,Spring事務管理預設不進行回滾。關於異常請參看本部落格的《Java異常分類》http://blog.csdn.net/woshixuye/article/details/8230407

2 改變預設方式

在@Transaction註解中定義noRollbackFor和RollbackFor指定某種異常是否回滾。

@Transaction(noRollbackFor=RuntimeException.class)

@Transaction(RollbackFor=Exception.class)

這樣就改變了預設的事務處理方式。

3 啟示

這就要求我們在自定義異常時,讓自定義的異常繼承自RuntimeException,這樣丟擲的時候才會被Spring預設的事務處理準確處理。

相關推薦

Spring事務何種異常

1 結論 Spring的事務管理預設只對出現執行期異常(java.lang.RuntimeException及其子類)進行回滾。若一個方法丟擲Exception或者Checked異常,Spring事務管理預設不進行回滾。關於異常請參看本部落格的《Java異常分類》http:

Spring入門知識 ———— Spring事務註解其他屬性(、只讀、過期)

一、引言 咱們spring入門知識也接近尾聲,後續小編會時不時更新Spring原始碼解析的文章,更加深入的理解。 那麼今天來看下@Transactional這個註解的其他幾個屬性,這裡小編就只是介紹

Spring事務執行時異常

我們在使用Spring時候一般都知道事務在遇到異常的時候會回滾,豈不知Spring的事務預設只有在發生執行時異常即:RunTimeException時才會發生事務,如果一個方法丟擲Exception或者Checked異常Spring的事務並不會回滾。下面我們來看看異常的分類,異常一般分為Checked異常和R

Spring事務異常,捕獲異常不拋出就不會

actions .info time tpi detail ava ogg ren tool 最近遇到了事務不回滾的情況,我還考慮說JPA的事務有bug? 我想多了....... 為了打印清楚日誌,很多方法我都加tyr catch,在catch中打印日誌。但是這邊情

(轉)Spring事務異常機制(出處在文末,轉自李慕白大神)

Spring事務異常回滾,捕獲異常不丟擲就不會回滾 推薦:Spring transaction 事務 --Isolation & Progation Java異常處理主要通過5個關鍵字控制:try、catch、throw、throws和finally。try的意思是試試它所包含的

Spring事務異常。TransactionAspectSupport(學習理解)

例:      類似這樣的方法不會回滾 (一個方法出錯,另一個方法不會回滾) :   if(userSave){    try {    userDao.save(user);

java事務異常——Spring事務異常,捕獲異常不丟擲就不會

最近遇到了事務不回滾的情況,我還考慮說JPA的事務有bug? 我想多了.......     為了列印清楚日誌,很多方法我都加tyr catch,在catch中列印日誌。但是這邊情況來了,當這個方法異常時候 日誌是列印了,但是加的事務卻沒有回滾。   例:      類

spring 宣告式事務傳播特性詳解(包括異常舉例)

1:Service介面實現 public interface IProcessBusiService {       //事務1@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW

十六、Spring事務異常,捕獲異常不丟擲就不會

最近遇到了事務不回滾的情況,我還考慮說JPA的事務有bug? 我想多了……. 為了列印清楚日誌,很多方法我都加tyr catch,在catch中列印日誌。但是這邊情況來了,當這個方法異常時候 日誌是列印了,但是加的事務卻沒有回滾。 例: 類似這樣的方法不會回滾 (一個方法出錯,另一個方

Spring事務異常,捕獲異常不丟擲就不會

最近遇到了事務不回滾的情況,我還考慮說JPA的事務有bug? 我想多了.......     為了列印清楚日誌,很多方法我都加tyr catch,在catch中列印日誌。但是這邊情況來了,當這個方法異常時候 日誌是列印了,但是加的事務卻沒有回滾。   例:      

Spring AOP宣告式事務異常

近日測試用例,發現這樣一個現象: 在業務程式碼中,有如下兩種情況,比如: throw new RuntimeException("xxxxxxxxxxxx"); 事物回滾 throw new Exception("xxxxxxxxxxxx"); 事物沒有回滾 自以為很瞭解事物,或許時間久遠的緣故,沒

Spring-Boot 事務@Transaction註解不異常處理

測試:    模擬使用jpa連續插入資料到資料庫,並開啟事務    其中4、6因為超出長度限制。    按道理會觸發回滾操作,但是不然。。。日誌明明顯示觸發回滾操作了,但是資料庫的資料卻沒有達到原子性    解決辦法:        由於@Transaction註解,在MyS

Spring學習-事務之修改預設型別

今天發現了個奇怪的問題,自定義的異常(extens Exception)丟擲的異常既然不會滾,然後查了下資料,原來spring預設回滾RuntimeException(及其下所有子類)。 解決辦法: 1.自定義的異常extens RuntimeException 2.在事務

Spring如何設定讓事務自動提交和Spring兩種事務管理方式的配置及使用

1,我們要明確,Spring如何設定讓事務自動提交和回滾?        ①如何自動提交?           理論上,可以通過對DataSource如下設定,讓事務自動提交 <!-- 配置資料來源 --> <beanid="dataSour

springmvc+mybaits一個事物同時update和調用存儲過程異常

pre AS equal shm use system AR pri actions 事物作用的impl類這樣寫的 @Override public int updateReturnAll(int item, int status, int idUser)

Jdbc操作事務(提交、)----以銀行轉賬為例

以銀行轉賬為例----Jdbc操作事務(提交、回滾) private Statement statement; private Connection conn; @Test public void test01() throws Exception { Class.forName("c

Python資料庫支援:PyMySQL安裝+資料庫連線操作+捕獲異常操作

PyMySQL是python3.x版本中用於連線MySQL伺服器的一個庫,Python2使用的是mysqldb PyMySQL遵循Python資料庫API v2.0規範,幷包含了pure-Python MySQL客戶端庫。 PyMySQL安裝 地址https://g

mysql的事務提交(commit)與(rollback)詳解

1.SQL概念 Structured Query Language- - -結構化查詢語言 有 資料定義語言(DDL),例如:CREATE、DROP、ALTER等語句; 資料操作語言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句; 資料查詢語言(DQL

spring事務和資料庫異常類別

spring事務傳播 PROPAGATION_REQUIRED--支援當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。 PROPAGATION_SUPPORTS--支援當前事務,如果當前沒有事務,就以非事務方式執行。 PROPAGATION_MANDATO

Java中事務的提交與

import java.sql.Connection;import java.sql.DriverManager;import java.sql.Statement;public class RollBack_test {    /**     * @param args     */    public s