背景是这样的:
现在需要写一些业务上的接口,接口只能给调用者返回成功或者失败。如果成功,则完全成功;如果失败,则什么事情也好像没发生过一样。恩,没错,就跟数据库事务一样。
遇到的问题是这样的:
业务上的操作,包括了很多的小的操作——小的操作在执行了基本的功能后,会调用数据库接口提供的方法来更新数据库(举例来说,小操作可能是:关灯是一个小操作,开灯是一个小操作,单独的一个操作之后它们都会把数据库标记为灯的状态)。这样,业务操作如果调用的小的操作过多的话,那执行回滚操作时的工作量就十分酸爽了……
已经尝试的解决办法和效果:
第一个解决办法:把互相为逆操作的小操作写在一起为一个整体,然后把业务操作写成这些小整体连在一起的链,这样来处理。大概就是过滤器的责任链模式这样。但最终发现,当前的业务可能会因为其它的原因而进行不同的分支判断或者调整,从而这个方法不够灵活;
上网找是否有好的解决办法,结果是好像没有……
现在希望大家帮忙的:
各位指条路吧……冇思路啊……
麻烦各位了~谢谢谢谢谢谢了……
1
evilic OP 或者各位给个能搜索的关键字也是极好的……
|
2
SoloCompany 2016-06-02 13:08:22 +08:00 via iPhone 1
加执行堆栈,如果失败就反方向回滚
|
3
Infernalzero 2016-06-02 13:13:30 +08:00
spring DataSourceTransactionManager
|
4
evilic OP @SoloCompany 貌似是可行并且比当前我的处理方法更好的~谢谢。感谢已发送~
|
5
evilic OP @Infernalzero DataSourceTransactionManager 可以管理 DataSource 之外的事务吗?
我不太了解这个,弱弱的问问。 下了一本《 Java 事务设计策略》,不知道对于我这个情况是否有帮助…… |
6
skydiver 2016-06-02 13:36:19 +08:00 1
典型的分布式事务问题,可以参考 http://coolshell.cn/articles/10910.html 以及 Google 一下相关内容
|