关于Spring的@Transactional注解失效以及事务无法回滚问题
来源:互联网 发布:死性不改网络歌手歌词 编辑:程序博客网 时间:2024/05/19 05:29
@Transactional失效问题
最近写的项目中需要一个service中的部分事务执行完就被commit,但是部分service需要失败回滚。因此写在一个大的service中并且加上@Transactional显然是无法满足需求的。因此这是需要把原先的一个service服务拆分,如原先的serviceA被拆分成serviceA和ServiceB,并且在ServiceB上打@Transactional注解,而serviceA未打注解。整体执行流程是由controller调用serviceA,再经serviceA调用serviceB。但是在执行过程发现serviceB中的事务语句在执行后就会被立马提交,事务控制未生效。翻阅资料有的说因为context:component-scan重复加载导致失效,但是sprintg配置中扫描service的包无重复。于是抱着试试的心态在serviceA上继续添加@Transactional注解,返现这是serviceB的事务生效。也就是说带事务注解的serviceA被其他service调用时,如果想要生效,最外层的也得加上@Transactional注解。
@Transactional,失败无法回滚
紧接着上个问题说,serviceB中的事务生效后,在执行遇到异常时,捕获并且抛出自定的异常InvalidException extends Exception。发现执行的sql事务无法回滚。无奈只能在注解上加上rollbackFor = InvalidException.class。但是为了弄明白原因,断点调试到spring底层代码,发现这么一句代码return (ex instanceof RuntimeException || ex instanceof Error);就是说要想事务回滚你的异常要么派生自RuntimeException或者Error,于是把InvalidException改成集成RuntimeExcepiton,并且把注解中的rollbackFor去除,发现也是可以正常回滚。
0 0
- 关于Spring的@Transactional注解失效以及事务无法回滚问题
- Spring MVC @Transactional注解方式事务无法回滚的解决办法
- spring事务回滚失效的问题
- [spring,mysql] spring使用注解式事务声明(@Transactional)无法回滚
- Spring @Transactional 事务回滚
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- Spring MVC @Transactional注解方式事务失效的解决办法
- java 计算两个时间之间的间隔
- 【并查集】洛谷 P1551 亲戚
- 论文-寻找idea的过程
- .NET中的三种接口实现方式
- 线程池工作队列饱和策略
- 关于Spring的@Transactional注解失效以及事务无法回滚问题
- ios
- OpenCV2中矩阵的归一化 normalize函数详解
- Java 中main函数的参数
- elasticsearch5.2.1安装
- Android 手机的网络状态详解
- vs2015编译protobuf-3.1.0
- python 对象真假值示例(哪些视为False)
- NS3 安装可视化动画工具netanim