FrankGui 2013-11-20 18:43
浏览 249
已采纳

请教:Spring的编程式事务能否支持分离式执行和提交?

因为就有的历史遗留问题,存在下面的使用场景:
1.在一个Request中执行SQL语句,比如Update
2.UI上可能由一个Button(比如Commit),执行时才真正COmmit数据,此时属于另外一个Request。
(这个不合理,大家都知道,应该马上提交,否则容易引起数据库死锁。但是,实实在在存在。我们是通过自己创建的虚假的DummySession,每次Request都会讲这个Dummy Session标志放到Request中,两次Request时的Session相同说明属于同一个会话。)

参照了Spring的PlatformTransactionManager文档,发现事务此Class和DataSource并没有直接关联,而是通过TransactionSynchronizationManager这个CLass,利用TheadLocal的方式在DataSource(以及其创建的Connection)和Transaction之间建立关联。这样的话,如果上面1、2两个步骤在同一个Thread中肯定就没有问题,但是我们这种情况就没法保证是同一个Session了。

不知道什么方式可以实现这个需求,请指教!

  • 写回答

1条回答 默认 最新

  • jinnianshilongnian 2013-11-20 20:08
    关注

    UI上可能由一个Button(比如Commit),执行时才真正COmmit数据,此时属于另外一个Request。 这个是两次请求,ThreadLocal肯定解决不了, 你上边提到了这个呢 需要把数据先放到session中/隐藏表单,当点击按钮时才去保存数据;;;或者建立一个临时表 这个临时表存储着数据的序列化/json形式的数据(持久存储了),页面存储一个id,点击按钮时取出来然后保存到数据库

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题