码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • @Transactional失效的几种情况说明


    文章目录

      • 1.非public修饰的方法
      • 2.类内部访问
      • 3.数据库存储引擎不支持事务
      • 4.异常类型不匹配
      • 5.异常捕获未抛出
      • 6.Bean没有纳入Spring容器管理
      • 7.事务方法内启动新线程进行异步操作
      • 8.传播属性设置为不走事务

    1.非public修饰的方法

    @Transactional注解只能在public修饰的方法下使用,因为spring aop实现事务时,判断了当前代理方法是否为public修饰。

    @Transactional
    private boolean test(){
        //do something
    }
    
    • 1
    • 2
    • 3
    • 4

    2.类内部访问

    类内部非直接访问带注解标记的方法 B,而是通过类普通方法 A,然后由 A 调用 B

    @Service
    public class Demo {
      public void A() {
     
        this.B();
      }
      
      @Transactional
      public void B() {
         ......
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    3.数据库存储引擎不支持事务

    MySQL中,MyISAM存储引擎不支持事务,InnoDB支持事务

    4.异常类型不匹配

    @Transactional注解默认处理运行时异常,非运行时异常需要通过rollbackFor属性指定。

    /**
     * 非运行异常,且没有通过 rollbackFor 指定抛出的异常,不生效
     
     * @param id
     * @return
     * @throws Exception
     */
    @Transactional
    public boolean testException(int id) throws Exception {
        //运行代码
        throw new Exception("参数异常");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    5.异常捕获未抛出

    方法内部的异常通过try catch捕获并处理了,未抛出

    @Transactional
    public void A(){
        try{
           ......
        }catch(Exception e){
           // 未抛异常
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6.Bean没有纳入Spring容器管理

    7.事务方法内启动新线程进行异步操作

    8.传播属性设置为不走事务

    @Transactional默认的事务传播机制是:REQUIRED,若指定成了NOT_SUPPORTED、NEVER事务传播机制,则事物不生效

  • 相关阅读:
    StarkNet 批量交互 mint 铸造 js 脚本
    【项目调优】项目从EhCache缓存变为redis之后,加载菜单变得极其缓慢
    索尼 toio™ 应用创意开发征文|小巧机器,大无限,探索奇妙世界
    【Java】 DirectByteBuffer堆外内存回收
    【MVC 开发模式】
    图像如何降噪?给图片降噪也可以很简单
    mysql每天自动将数据库数据保存到指定文件夹
    为什么大家都开始做游戏化产品?
    给你 2 万条数据,怎么快速导入到 MySQL?写得太好了...
    5年测试,面试结束后被HR怼了..(心塞)
  • 原文地址:https://blog.csdn.net/qq_41570752/article/details/134509653
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号