Я создаю 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 для выполнения потока, он работает нормально.
Как я могу распространить транзакцию (readOnly) на выполнение метода, отправленного из ForkJoinPool, есть ли способ?