本文主要是介绍spring在service层的方法报错事务不会回滚,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
@Transactional(rollbackFor = {Exception.class})
public void insertData() throws Exception {// 业务代码1business1();// 业务代码2business2();// 业务代码3business3();
}public void business1() {// 此处省略业务操作
}public void business2() {// 此处省略业务操作
}public void business3() {// 此处省略业务操作
}
以上代码在service层执行insertData方法时,business3中的代码执行出错了,business1和business2中的操作都没有回滚
解决方法:
方法一:在service方法中捕获异常,同时向外抛出运行时异常
@Transactional(rollbackFor = {Exception.class})
public void insertData() throws Exception {try {// 业务代码1business1();// 业务代码2business2();// 业务代码3business3();} catch(Exception e) {throw new RuntimeException(e);}
}
方法二:在service方法中捕获异常,同时手动回滚事务
@Transactional(rollbackFor = {Exception.class})
public void insertData() throws Exception {try {// 业务代码1business1();// 业务代码2business2();// 业务代码3business3();} catch(Exception e) {TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // 事务回滚}
}
参考链接:
https://www.cnblogs.com/0201zcr/p/5962578.html
http://www.cuiyongzhi.com/post/90.html
https://blog.csdn.net/paul342/article/details/52330609
这篇关于spring在service层的方法报错事务不会回滚的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!