问题描述
我有一个复杂的业务流,这个业务流会对多个业务模块的数据造成影响,我打算通过责任链的设计模式来解决一个“大方法”写全部功能的问题。
但是这里面会涉及到一个回滚问题,如果这个责任链中的任意一个操作失败了,应当对之前的数据进行一个回滚。但如果这个时候数据库连接池挂了,或者是网络断了,或者服务器停电了,我应该怎么把事务给回滚呢?
问题出现的环境背景及自己尝试过哪些方法
我想的办法比较蠢:
- 整个责任链使用同一个事务,直到最后一次提交,才提交整个事务。
- 把整个责任链需要提交数据的部分独立出来,最后单独写一个实现用于统一的事务提交。
方法1的缺点是如果责任链太冗长,这个事务时间过长很可能会导致数据库发生死锁的情况,并且这种代码不加以注意,后续维护一不小心就容易出现问题
方法2的缺点是每个实现类所需要提交的数据不一样,不太好去封装。
你期待的结果是什么?实际看到的错误信息又是什么?
求一点建议,多谢多谢
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…