事物回滚,通常抛异常,能够本身手写一个异常,根据异常判断。事物仍是按照 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的思路。数据库