java - Spring事务回滚问题
问题描述
Spring事物,在service层注入事物,进行两个insert操作,在service方法中要自己抛出异常然后指定回滚吗?还是一个insert没有成功自己也不用抛出异常就会回滚吗?这里使用mybatis的代理dao实现,insert失败时会有提示或异常抛出吗
问题解答
回答1:使用@Transaction(rollbackFor=Throwable.class)注解到Service类上或具体的方法上,需要注意的是@Transaction注解默认只对RuntimeException异常捕获并回滚,也就是说如果你抛出的是Exception异常将不进行回滚,所以要记得加上rollbackFor=Throwable.class指定所有的异常都进行回滚
回答2:同意@正能量前线的答案,并且补充下,如果在一个方法中进行多次操作,需要考虑事务的传播范围,当然默认是 propagation = Propagation.REQUIRED,意思是说: 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中.
回答3:如果有编译异常抛出就可以 不可以自己捕获处理 你既然用了spring框架 ,自己捕获并处理了异常,框架不会帮你回滚了,前提是你在spring配置文件里边配置了事务的回滚策略同意一楼所说默认运行异常回滚,事务是加在service层的,你那两个insert方法本身并没有事务,所以不需要考虑传播行为。
回答4:看了前面前面两位的回答,我再补充下。在Spring事务默认是基于接口的JDK代理。所以在你的Service层调用的两个insert方法,如果insert也是service层方法,那必须是接口方法,如果是私有方法,则私有方法不会回滚。还要注意多线程情况下的事务问题。
相关文章:
1. 微信公众号发送模板消息返回错误410002. 这是什么情况???3. css - 手机浏览器的兼容问题,微信和其它下载的浏览器打开没有问题,谷歌也测试过,就是手机自带的浏览器有问题。4. bootstrap的col左右布局不生效在谷歌浏览器不生效5. Android明明可以直接分享,为什么还要用微信开放平台、微博开放平台的sdk?6. javascript - 单页面应用怎么监听ios微信返回键?7. angular.js - 在ionic下,利用javascript导入百度地图,pc端可以显示,移动端无法显示8. node.js - nojs的response.write()如何返回一个html9. css - input中transition 设置background-color过渡,chrome浏览器页面初始化渲染会有过度效果10. node.js - JavaScript的一个不能理解的地方
