事物回滾,通常拋異常,能夠本身手寫一個異常,根據異常判斷。事物仍是按照 spring 的以前的邏輯。只是,手工拋特定的異常。這樣你就能夠捕獲這個異常給前臺用戶。html
方法捕獲異常拋出便可,記得方法定義必須拋出異常,不然框架捕獲不到,聲明式事物不起做用。前端
我認爲上述思路在實現上是統一的。下面給出一個用僞代碼描述的例子。java
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) { //手工拋出,做用有兩個, //一、使用spring事務加強,對事務回滾。 //二、action中能夠捕獲該異常,並處理,例:在前端顯示提示信息。 throw new MyException(); } } }
例子結果說明:
一、事務加強能夠經過SpringAOP進行事務加強。
二、事務發生回滾時,Action能夠「判斷」事務發生了回滾,並處理。spring
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的思路。數據庫