【发布时间】:2019-02-10 04:07:12
【问题描述】:
假设我们进入一个方法并在主线程中启动一个事务。在这个方法中,有一些异步方法,所以我们在这个方法中又创建了 2 个线程;
Thread 1 --> SubMethod1 --> Saving (t=1)
^
|
MainThread --> MainMethod --> Saving (t=3)
|
v
Thread 2 --> SubMethod2 --> Exception while saving (t=2).
由于线程 2 出现异常,我想回滚其他线程完成的所有事务。但是,尽管可以回滚主线程线程 2 拥有的事务,但我无法回滚线程 1 工作。 我正在使用 Spring/Hibernate,所以您有什么想法来管理它以及如何应用吗?
谢谢
【问题讨论】:
-
不要使用线程。事务是线程绑定的,您有多个事务。您不能回滚已提交的事务。唯一的“解决方案”是手动撤消工作(删除记录、恢复旧状态等)。
标签: java spring multithreading hibernate spring-transactions