当前位置: 移动技术网 > IT编程>开发语言>Java > SpringBoot+mybatis使用@Transactional无效

SpringBoot+mybatis使用@Transactional无效

2019年02月21日  | 移动技术网IT编程  | 我要评论

项目中新增过程中如果出现异常需要回滚, 在service实现方法中使用@transactional注解失效

解决:

1, 在controller中使用try{}catch捕捉异常

2, 在service实现中使用@transactional注解

controller

   @requestmapping(value = "/add",method = requestmethod.post)
    @responsebody
    public result add(httpservletrequest request, @requestbody user user){
        result result = new result();
        try{
            result = service.insert(user);
        }catch (exception e){
            logger.error("失败", e);
        }
        return result;
    }

service: 

@transactional(rollbackfor = exception.class) 设置出现什么异常回滚, 默认情况下,spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚

 

java里面将派生于error或者runtimeexception(比如空指针,1/0)的异常称为unchecked异常,
其他继承自java.lang.exception得异常统称为checked exception,如ioexception、timeoutexception等

 

   @override
    @transactional(rollbackfor = exception.class)
    public result insert(user user){
        result result = new result();int result = usermapper.insert(user);return result;
    }

总结: 异常捕获在controller去做,这样在service层中 @transactional在发生异常时可以正常进行回滚操作。

 

参考: 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网