@Transactional注解事务不回滚不起作用无效

今天遇到了@Transaction的新坑:异常是在controller层产生的,而@Transaction在service层中添加。我在Controller层方法上加@Transaction注解就可以了,当然如果你用try{}catch{}捕获了异常,也起不到回滚作用。

顺便总结下常见的几种@Transaction不起作用的情况,希望能帮到各位。

1.spring项目:首先大家得先看看配置文件中是否开启事务                               <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

                 <property name="dataSource" ref="dataSource"/>  

          </bean>

         <tx:annotation-driven transaction-manager="transactionManager"/>

   springBoot项目:在springBoot启动类加注解@EnableTransactionManagement,可不写。

2.看所要操作的数据库表是否是InnoDB引擎;因为MyISAM引擎是不支持事物的。

        查看方法:show create table tableName;

        修改引擎:alter table tableName type=InnoDB;

        重启MySQL服务:service mysqld restart;

3.@Transaction所注解的方法应是public,确认service层是否加了@Service注解

4.异常一般分为非检查异常(unchecked Exception) 和检查时异常(checked Exception)

   事物的回滚只对unchecked异常有效,对检查异常无效。若要使其他异常也起作用,则注解为

   @Transaction(rollbackFor=Exception.class)

5.看异常是否发生在service层,

       ==》如果是,是否在已经捕获了异常在try{}catch{}中,是的话将异常抛出throw,因为对捕获到的异常不会回滚

       ==》如果不是,在Controller层方法上添加上@Transaction注解,异常没被捕获处理,则会回滚,反之不行需将异常抛出

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值