Spring事务控制使用注解控制的方法发生异常既要回滚事务也要返回错误信息

[亡魂溺海] 提交于 2020-01-16 02:57:18

使用Spring声明式事务方式控制事务简单方便(详解参考:链接: Spring事务@Transactional的说明和使用举例.),但是有些场景还需要结合编程式事务方式使用。

如以下场景:添加@Transactional注解控制的方法有返回值,若此方法运行期间出现异常既需要回滚当前方法的事务,也要正常return返回值给调用此方法的上级使用。这时就需要手动回滚事务了。

import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

@Transactional(rollbackFor = Exception.class)
@Override
public List<String> testMethod() {
    List<String> res = null;
    try {
        // do something...
        res.add("message");
        if (res.size() < 0) {
            // 手动抛异常测试
        	throw new RuntimeException("occur error!");
        }
    } catch (Exception e) {
        System.out.println(e.getMessage());
        // 手动回滚事务
        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        return res;
    }
    return res;
}

以上这段代码中,下面这句代码很关键:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // 手动回滚事务

在可能会出现异常的地方手动抛异常,然后在catch中捕获异常,手动回滚异常并return方法返回值,即可。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!