码迷,mamicode.com
首页 > 编程语言 > 详细

SpringBoot设置 @Transactional ,并在异常处理中调用setRollbackOnly()事务不回滚

时间:2017-10-18 02:12:09      阅读:4584      评论:0      收藏:0      [点我收藏+]

标签:ror   ret   string   存储引擎   ber   aspect   配置文件   注解   cat   

在SpringBoot 中,使用事务非常简单,只需在方法上面加入 @Transactional  注解就可以实现。也可加在类上,此时则类中所有方法都支持事务。

而当我使用下面代码时,发现事务却没有回滚,异常之前的数据仍然插入了数据库

    @Transactional
    @RequestMapping(value="/create", method=RequestMethod.POST)
    public Resp createUser(String name, String phone, String password){    
        try {
            //...
            
        } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            //...

            return Resp.error(Resp.ErrorCode.USER_CREATE, null);
        }
        return Resp.success();
    }

在各种尝试之后,最后发现是mysql中的表类型是MyISAM,而MyISAM存储引擎的一个特点就是不支持事务

解决方法:

之前在配置文件中的设置(使用的默认的存储引擎)

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

修改为(指定为InnoDB)

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

 

SpringBoot设置 @Transactional ,并在异常处理中调用setRollbackOnly()事务不回滚

标签:ror   ret   string   存储引擎   ber   aspect   配置文件   注解   cat   

原文地址:http://www.cnblogs.com/wenhui92/p/7684746.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!