我正在创建一个具有多个线程的 ForkJoinPool 来并行执行一个流,它是从 jpa 中的查询执行的,但是我在将事务传播到 ForkJoinPool 的方法提交时遇到了问题。
@Transactional(readOnly = true)
public void streamTest() {
ForkJoinPool customThreadPool = new ForkJoinPool(20);
try {
customThreadPool.submit(() ->
priceRepository.streamAll()
.parallel()
.map(p -> this.transform(p))
.forEach(System.out::println)
).get();
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我收到错误消息:“您正在尝试在没有保持连接打开的周围事务的情况下执行流式查询方法,以便实际上可以使用流。确保使用流的代码使用@Transactional 或任何其他方式声明一个(只读)事务。”
如果我取消 ForkJoinPool 来执行流,它工作正常。如何将事务(只读)传播到从 ForkJoinPool 提交的方法的执行,有没有办法?
跃然一笑
相关分类