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

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);
        。。。。
        //抛异常
        。。。   
    }
}
阅读 5k
1 个回答

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

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

PlatformTransactionManager还有以下多种实现。

clipboard.png

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


撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题