因为就有的历史遗留问题,存在下面的使用场景:
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了。
不知道什么方式可以实现这个需求,请指教!