我们有一个初始交易,需要做一些准备工作。现在我们想暂停初始交易并生成 N 个新交易,这些交易并行地做自己的事情并且不会互相干扰。
使用 REQUIRES_NEW 将暂停初始交易,然后生成不超过 1 笔交易。 NESTED 面临的问题是它们都共享数据库连接,因此它们会互相干扰。
作为复杂性的另一层,一切都是带有 Flux 和 Mono 的项目反应器管道。我已经在这个事务管理上卡了两天了。
如何从 1 个初始事务中生成 10 个新事务,每个事务都有自己的数据库连接?
要并行执行事物,每个事物都需要自己的线程。执行此操作的典型方法是通过 ExecutorService。
当执行准备工作的线程完成准备工作时,它将向 ExecutorService 提交其他 10 项工作,并为每一项接收一个 Future(它们被放置在一个集合中)。
每个工作项都将在其自己的数据库连接上管理自己的事务,其范围仅限于自己的线程。
迭代集合以 get() 完成 10 个项目中每一项的结果。
然后你可以继续执行接下来的事情。