开发者社区> 问答> 正文

请教: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了。

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

展开
收起
长安归故里. 2020-01-07 13:33:21 970 0
1 条回答
写回答
取消 提交回答
  • UI上可能由一个Button(比如Commit),执行时才真正COmmit数据,此时属于另外一个Request。 这个是两次请求,ThreadLocal肯定解决不了, 你上边提到了这个呢 需要把数据先放到session中/隐藏表单,当点击按钮时才去保存数据;;;或者建立一个临时表 这个临时表存储着数据的序列化/json形式的数据(持久存储了),页面存储一个id,点击按钮时取出来然后保存到数据库

    2020-01-07 13:33:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载