解决Spring的声明式事务中的自定义异常不回滚问题
来源:互联网 发布:2016中国象棋软件排名 编辑:程序博客网 时间:2024/06/04 18:00
@Transactionalpublic void opreateAccount(int fromUserId, int toUserId, BigDecimal money) {System.out.println("转账开始!!");try{//根据id获取转出用户金额BigDecimal fromaccount = userdao.getAccount(fromUserId);if(fromaccount.compareTo(money) >= 0){userdao.subMoney(fromUserId, money);//int i = 1/0;if(true){throw new UserAccountException("抛异常!!");}userdao.addMoney(toUserId, money);}else{throw new UserAccountException("用户金额不足!!");}} catch(UserAccountException e){e.printStackTrace();}System.out.println("转账完成!!");}
在红色代码处抛出自定义异常,异常类继承了Exception类。
在测试上述代码(测试用例为将账户id为3的用户转账50元到账户id为5的账户)后发现,异常被捕获,fromUserId中的金额依然被扣除,很明显事务未被回滚。
解决方法如下:
声明式异常只有出现运行时 异常并且不被捕获才会回滚,在编程式事务中出现异常要显式的调用rollback进行回滚。1, 只捕获throw new RuntimeException();异常, 这时回滚
2, 用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();在声明式事务中显示的回滚
阅读全文
1 0
- 解决Spring的声明式事务中的自定义异常不回滚问题
- Spring 自定义AOP与声明式事务执行顺序问题
- spring 声明式事务配置,抛出runtimeException异常不回滚
- spring 声明式事务配置,主动抛出异常不回滚
- spring 中的声明式事务不回滚 请高手帮忙解决一下 谢谢!
- Spring声明式事务配置管理方法(Spring中的四种声明式事务的配置)
- Spring的声明式事务
- spring的声明式事务
- spring的声明式事务
- Spring的声明式事务
- Spring的声明式事务
- spring的声明式事务
- Spring中的四种声明式事务的配置
- Spring中的四种声明式事务的配置
- Spring中的四种声明式事务的配置
- Spring中的四种声明式事务的配置
- Spring中的四种声明式事务的配置
- Spring中的四种声明式事务的配置(转载)
- 我使用过的Linux命令之unrar
- 学会4种备份MySQL数据库(基本备份方面没问题了)
- 异常(try……catch……finally、throws和throw的区别、自定义异常)
- 习题 5.3 输入两个正整数m和n,求其最大公约数和最小公倍数。
- Faster rcnn--改变anchor的size
- 解决Spring的声明式事务中的自定义异常不回滚问题
- Java中数组的使用
- CNN的训练图像与测试图像不一致的多尺度问题
- 名字隐藏与重载
- WebRTC学习之ICE深入理解
- 使用python获取email的subject中带有指定字符串的邮件
- leetcode--Balanced Binary Tree
- 深入理解jquery新的绑定事件机制on方法的使用(推荐)
- React常见问题集锦