欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringBoot+mybatis使用@Transactional无效

程序员文章站 2022-07-05 16:03:28
项目中新增过程中如果出现异常需要回滚, 在service实现方法中使用@Transactional注解失效 解决: 1, 在controller中使用try{}catch捕捉异常 2, 在service实现中使用@Transactional注解 controller service: @Transa ......

项目中新增过程中如果出现异常需要回滚, 在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在发生异常时可以正常进行回滚操作。

 

参考: