@Transactional 注解失效问题

简介: @Transactional 注解失效问题

1. @Transactional 注解添加在非 public 修饰的方法上;


2. @Transactional 的 propagation 属性设置问题;


TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。


TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。


TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。


3. @Transactional 注解属性 rollbackFor 设置错误;


rollbackFor 可以指定能够触发事务回滚的异常类型。Spring默认抛出了未检查unchecked异常(继承自 RuntimeException 的异常)或者 Error才回滚事务;其他异常不会触发回滚事务。如果在事务中抛出其他类型的异常,但却期望 Spring 能够回滚事务,就需要指定 rollbackFor属性。


4. 同一个类中方法调用,导致@Transactional失效;


比如有一个类Test,它的一个方法A,A再调用本类的方法B(不论方法B是用public还是private修饰),但方法A没有声明注解事务,而B方法有。则外部调用方法A之后,方法B的事务是不会起作用的。


5. 异常被你的 catch“吃了”导致@Transactional失效;


@Transactional
public Integer A() throws Exception {
    int insert = 0;
    try {
        CityInfoDict cityInfoDict = new CityInfoDict();
        cityInfoDict.setCityName("2");
        cityInfoDict.setParentCityId(2);
        /**
         * A 插入字段为 2的数据
         */
        insert = cityInfoDictMapper.insert(cityInfoDict);
        /**
         * B 插入字段为 3的数据
         */
        b.insertB();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

如果B方法内部抛了异常,而A方法此时try catch了B方法的异常,那这个事务就不会正常回滚。


6. 数据库引擎不支持事务。


推荐写法:service 层不使用 try catch ,在 controller 层去使用。

相关文章
|
XML JSON Java
SpringMVC中HttpMessageConverter使用实践详解
SpringMVC中HttpMessageConverter使用实践详解
1147 0
|
缓存 监控 NoSQL
Redis - 在电商购物车场景下的实战分析
Redis - 在电商购物车场景下的实战分析
1250 0
|
SQL 存储 关系型数据库
SQL自学笔记(3):SQL里的DCL,DQL都代表什么?
本文介绍了SQL的基础语言类型(DDL、DML、DCL、DQL),并详细说明了如何创建用户和表格,最后推荐了几款适合初学者的免费SQL实践平台。
799 3
SQL自学笔记(3):SQL里的DCL,DQL都代表什么?
|
监控 Linux
在Linux中,如何查看系统资源使用情况?
在Linux中,如何查看系统资源使用情况?
|
Java 数据库连接 mybatis
|
SQL Java 数据库
Transactional注解讲解及使用
事务是数据库操作的一组集合,它作为一个工作单元,要求所有操作要么全部成功,要么全部失败。事务的四个基本特性是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
|
存储 前端开发 Java
Springboot使用参数解析器HandlerMethodArgumentResolver,解析请求头里的数据
HandlerMethodArgumentResolver 是 Spring MVC 中的一个接口,它允许你自定义方法参数的解析过程。当处理请求时,Spring MVC 需要将请求中的信息映射到控制器方法的参数上,而 HandlerMethodArgumentResolver 允许你在这个过程中进行自定义操作。
728 2
|
算法 数据库
Mybatis-Plus实现常规增删改操作
Mybatis-Plus实现常规增删改操作
454 0
element-ui 表格和 tooltip修改背景颜色和箭头颜色
element-ui 表格和 tooltip修改背景颜色和箭头颜色
2184 0
|
数据建模 Shell 数据安全/隐私保护
Docker下安装SVN
Docker下安装SVN