1 主要處理思路
1.1 思路1
事物回滾顾稀,一般拋異常达罗,可以自己手寫一個(gè)異常,根據(jù)異常判斷础拨。事物還是按照 spring 的之前的邏輯氮块。只是,手工拋特定的異常诡宗。這樣你就可以捕獲這個(gè)異常給前臺(tái)用戶滔蝉。
1.2 思路2
方法捕獲異常拋出即可,記得方法定義必須拋出異常塔沃,否則框架捕獲不到蝠引,聲明式事物不起作用。
1.3 總結(jié)
我認(rèn)為上述思路在實(shí)現(xiàn)上是統(tǒng)一的蛀柴。下面給出一個(gè)用偽代碼描述的例子螃概。
MyException:
public classMyException extends RuntimeException {
public MyException(){
}
}
Action中:
@Autowired
private XServicexService;
public String AddXmethod(){
try {
xService.addX (x); //將x存入數(shù)據(jù)庫
} 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);
//人為的創(chuàng)建出一個(gè)異常吊洼,測(cè)試回滾在action中可以被判斷。
try {
int a =10/0;
} catch (Exceptione) {
//手工拋出制肮,作用有兩個(gè)冒窍,
//1、使用spring事務(wù)增強(qiáng)豺鼻,對(duì)事務(wù)回滾综液。
//2、action中可以捕獲該異常儒飒,并處理谬莹,例:在前端顯示提示信息。
throw newMyException();
}
}
}
例子結(jié)果說明:
1、事務(wù)增強(qiáng)可以通過SpringAOP進(jìn)行事務(wù)增強(qiáng)附帽。
2埠戳、事務(wù)發(fā)生回滾時(shí),Action可以“判斷”事務(wù)發(fā)生了回滾士葫,并處理乞而。
2 參考文獻(xiàn)
http://www.jb51.net/article/32246.htm (Spring事務(wù)管理只對(duì)出現(xiàn)運(yùn)行期異常進(jìn)行回滾改變默認(rèn)方式)
http://www.cnblogs.com/0201zcr/p/5962578.html(spring 事務(wù)回滾)
http://blog.csdn.net/gaowenming/article/details/5214737 (spring AOP的異常攔截)
http://www.cnblogs.com/zhuawang/p/5954819.html (關(guān)于Spring事務(wù)回滾的問題)
https://www.oschina.net/question/697871_2182978 (spring的事務(wù)insert操作怎么判斷是否執(zhí)行成功了還是回滾了)
濟(jì)南java技術(shù)交流群群主隱士的思路與百度用戶mahl8007的思路。