事务的失效场景

事务的失效场景

1.数据库是否支持事务(mysql的MyIsam不支持事务)

2.注解所在的类是否被加载成Bean

3.注解所在方法是否被修饰为public

4.是否发生自调用问题

5.所用数据源是否加载了事务管理器

6.扩展配置propagation是否正确

7.异常被捕获

8.异常抛出类型不对

其实发生最多就是自身调用、异常被吃、异常抛出类型不对这三个了。​​​​​​​

<!--rollback-for 在该方法中有异常则进行回滚-->
<tx:method name="*add*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>

在aop配置事务控制或注解 @Transactional控制事务中,try...catch...会使事务失效,那么如何解决呢?

1.可在catch中抛出运行时异常throw new RuntimeException(e)(注:默认回滚的是RuntimeException,如果你想触发其他异常的回滚,需要在注解上配置一下)

2.手动回滚TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(),使得事务生效,出现异常回滚。

   @Transactional(rollbackFor = Exception.class)
    public Result update(@RequestBody RestaurantVo entity) {
        Result result = new Result();
        try {
             //save(entity);
        } catch (Exception e) {
            //throw new RuntimeException(e);
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return result.error(Result.CODE_ADD_FAILED + ":" + e.getMessage());

        }
        return result;
全部评论

相关推荐

owwhy:难,技术栈在嵌入式这块显得非常浅,并且简历有大问题。教育经历浓缩成两行就行了,写什么主修课程,说的不好听这块没人在意,自我评价删了,项目写详细点,最终简历缩成一页。相关技能怎么说呢,有点差了,还写成这么多行
投了多少份简历才上岸
点赞 评论 收藏
分享
合适才能收到offe...:招聘上写这些态度傲慢的就别继续招呼了,你会发现hr和面试官挺神的,本来求职艰难就可能影响一些心态了,你去这种公司面试的话,整个心态会炸的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务