Spring事务注解的方法里抛异常回滚如何处理非数据库的脏数据?

发布于 2022-09-07 12:23:22 字数 423 浏览 35 评论 0

Spring事务注解的方法,如果抛RuntimeException,就会回滚
但是这个回滚指的是回滚数据库
如果这个方法里有对redis或者成员变量,集合元素等的赋值操作
如何回滚?
譬如

@Service
public class ServImpl{

    ArrayList<Product> productList; 

    @Transactional
    void doSomething(int id){
        daoImpl.deleteById(id);
        redisTemplate.decrBy("count", 1);
        productList.removeAt(id);
        。。。。
        //抛异常
        。。。   
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吹泡泡o 2022-09-14 12:23:23

https://www.ibm.com/developer...
可以参考一下这篇文章。

感觉你讲的数据库,redis之类的是由具体的PlatformTransactionManager决定的,比如数据库相关的事务管理是由DataSourceTransactionManager实现的。而spring也提供了jpa相关的数据库事务管理实现。所以如果redis配置的是支持事务,并且作为数据源加入了项目中,它会和别的事务一样一起回滚的。

PlatformTransactionManager还有以下多种实现。

clipboard.png

但是至于像数组操作的这样的操作,它是不会回滚的。因为首先事务的概念本身就是针对数据库的操作而产生的,而回滚则是为了确保一组数据库操作能够同时实现或是同时不实现。比如mysql就会根据log来执行回滚操作。但是数组并不属于事务定义的范围啊。当然啦,你也可以使用动态代理自己实现数组回滚这种啦。


~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文