抛出自定义异常,spring AOP事务不回滚的解决方案
2016-03-08 16:59
513 查看
Spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说
事务回滚:throw new RuntimeException("xxxxxxxxxxxx");
事物不回滚:throw new
Exception("xxxxxxxxxxxx");
那么,如何在抛出Exception或者自定义异常时,事务也进行回滚呢?有以下几种方案:
1、在捕获到异常或者显示的抛出 RuntimeException
2、手动回滚----在捕获到异常或者显示的抛出自定义异常前,加一段代码:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
3、在AOP的配置文件中,添加如下信息:
<tx:method name="add*" propagation="REQUIRED" rollback-for="com.xxx.xxx.xxxException"/>
这样,在抛出自定义异常时,就会进行事务的回滚了
小结:
方法1:在做测试时比较方便,放在业务中无法区分具体的错误信息
方法2:在个别业务处理或者调试代码时使用,放在代码中不方便维护,每个异常都需要增加。
方法3:适合业务开发,也符合AOP的理念。将事务控制和业务分离
事务回滚:throw new RuntimeException("xxxxxxxxxxxx");
事物不回滚:throw new
Exception("xxxxxxxxxxxx");
那么,如何在抛出Exception或者自定义异常时,事务也进行回滚呢?有以下几种方案:
1、在捕获到异常或者显示的抛出 RuntimeException
2、手动回滚----在捕获到异常或者显示的抛出自定义异常前,加一段代码:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
3、在AOP的配置文件中,添加如下信息:
<tx:method name="add*" propagation="REQUIRED" rollback-for="com.xxx.xxx.xxxException"/>
这样,在抛出自定义异常时,就会进行事务的回滚了
小结:
方法1:在做测试时比较方便,放在业务中无法区分具体的错误信息
方法2:在个别业务处理或者调试代码时使用,放在代码中不方便维护,每个异常都需要增加。
方法3:适合业务开发,也符合AOP的理念。将事务控制和业务分离
相关文章推荐
- java并发编程:线程安全管理类--原子操作类--AtomicLongArray
- 如何在spring中读取properties配置文件里面的信息
- Java源码阅读之HashMap
- 第一周JAVA学习笔记(一)
- myeclipse操作相关
- java中的Comparator和Comparable的区别
- JDK的环境变量设置
- java并发编程:线程安全管理类--原子操作类--AtomicIntegerFieldUpdater<T>
- java ThreadPoolExecutor 自定义线程池优势
- (5)正则表达式——Java
- AS和Eclipse的快捷键
- java并发编程:线程安全管理类--原子操作类--AtomicIntegerArray
- 在aix环境中用java实现自动发邮件告警
- java的动态代理机制
- (1)获取网页源代码——Java
- AXIS2远程调用WebService示例(Eclipse+AXIS)
- JDK的环境变量设置
- java面向对象之向上转型和向下转型
- java并发编程:线程安全管理类--原子操作类--AtomicBoolean
- 让32位Eclipse和64位Eclipse同时在64的Windows7上运行