spring事務增強,事務回滾如何判斷?希望在前端上有個提示

奇蹟之誘惑發表於2019-01-19

1 主要處理思路

1.1 思路1

事物回滾,一般拋異常,可以自己手寫一個異常,根據異常判斷。事物還是按照 spring 的之前的邏輯。只是,手工拋特定的異常。這樣你就可以捕獲這個異常給前臺使用者。

1.2 思路2

方法捕獲異常丟擲即可,記得方法定義必須丟擲異常,否則框架捕獲不到,宣告式事物不起作用。

1.3 總結

我認為上述思路在實現上是統一的。下面給出一個用虛擬碼描述的例子。

MyException:
public class MyException extends RuntimeException { 
    public MyException(){
    }
}

Action中:
@Autowired
public class XAction {
    @Autowired
    private XServicexService xService;
    
    public String AddXmethod(){
        try {
            xService.addX (x); //將x存入資料庫
        } catch (MyException e) {
            System.out.println("service層出異常了....");
            //其它處理,例:加上需要在前端顯示的提示資訊。
        }    
    }
}

xService中:
@Service
@Transactional(propagation=org.springframework.transaction.annotation.Propagation.REQUIRED)
public class XService{

    @Autowired
    private XDao xDao;
    
    public void addX (X x) throws MyException {
    
        xDao.addX(x);
        
        //人為的建立出一個異常,測試回滾在action中可以被判斷。
        try {
            int a =10/0; 
        } catch (Exceptione) {
       
            //手工丟擲,作用有兩個,
            //1、使用spring事務增強,對事務回滾。
            //2、action中可以捕獲該異常,並處理,例:在前端顯示提示資訊。
            throw new MyException();
        }
    }
}

例子結果說明:
1、事務增強可以通過SpringAOP進行事務增強。
2、事務發生回滾時,Action可以“判斷”事務發生了回滾,並處理。

2 參考文獻

http://www.jb51.net/article/3… (Spring事務管理只對出現執行期異常進行回滾改變預設方式)
http://www.cnblogs.com/0201zc…(spring 事務回滾)
http://blog.csdn.net/gaowenmi… (spring AOP的異常攔截)
http://www.cnblogs.com/zhuawa… (關於Spring事務回滾的問題)
https://www.oschina.net/quest… (spring的事務insert操作怎麼判斷是否執行成功了還是回滾了)
濟南java技術交流群群主隱士的思路與百度使用者mahl8007的思路。

相關文章