zhangyayun0 2019-06-27
事物回滚,一般抛异常,可以自己手写一个异常,根据异常判断。事物还是按照 spring 的之前的逻辑。只是,手工抛特定的异常。这样你就可以捕获这个异常给前台用户。
方法捕获异常抛出即可,记得方法定义必须抛出异常,否则框架捕获不到,声明式事物不起作用。
我认为上述思路在实现上是统一的。下面给出一个用伪代码描述的例子。
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可以“判断”事务发生了回滚,并处理。
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的思路。