我是靠谱客的博主 年轻冥王星,最近开发中收集的这篇文章主要介绍@Transactional的踩坑和实践,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最佳实践:
1.当使用 @Transactional 的时候,都新启一个类来写,不要在同一个类中相互调用,可以避免很多坑。比如类中包含非事务方法a和事务方法b,a中调用b,b的事务就不会生效,都是代理的问题,aspectJ 也有很多类似的坑。
2.当外层事务方法调用内层事务方法,内层事务方法传播属性是 REQUIRED 时,内层方法抛出异常,外层方法不管 catch 不 catch 都会回滚;
3.当外层事务方法调用内层事务方法,内层事务方法传播属性是 NESTED 时,内层方法抛出异常,外层方法 catch ,外层方法不会回滚;不 catch 都会回滚;

@Transactional(rollbackFor = Exception.class)
    public void a() {
        try {
            db1();
            b();
        } catch (Exception e) {
            // b 方法如果是 Propagation.REQUIRED,不管catch 与否,a() 都会回滚,db1和db2方法都会回滚
            // b 方法如果是 Propagation.NESTED,catch 了,a() 不会回滚,b() 会回滚;不 catch,a()和 b() 都会回滚
        }

    }

    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
    public void b() throws Exception {
        db2();
    }

    protected void db1() {
    }

    protected void db2() {
    }

最后

以上就是年轻冥王星为你收集整理的@Transactional的踩坑和实践的全部内容,希望文章能够帮你解决@Transactional的踩坑和实践所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部