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);
。。。。
//抛异常
。。。
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
https://www.ibm.com/developer...
可以参考一下这篇文章。
感觉你讲的数据库,redis之类的是由具体的
PlatformTransactionManager
决定的,比如数据库相关的事务管理是由DataSourceTransactionManager
实现的。而spring也提供了jpa相关的数据库事务管理实现。所以如果redis配置的是支持事务,并且作为数据源加入了项目中,它会和别的事务一样一起回滚的。PlatformTransactionManager
还有以下多种实现。但是至于像数组操作的这样的操作,它是不会回滚的。因为首先事务的概念本身就是针对数据库的操作而产生的,而回滚则是为了确保一组数据库操作能够同时实现或是同时不实现。比如mysql就会根据log来执行回滚操作。但是数组并不属于事务定义的范围啊。当然啦,你也可以使用动态代理自己实现数组回滚这种啦。