Ребята, всем привет.
Есть компонент, в нем ExecutorService. В него я сабмичу таски, которые работают с JPA.
При вызове JPA получаю эксепшн No EntityManager with actual transaction available for current thread
Пробовал все обвешать @Transactional - не работает.
Как быть в такой ситуации? Простых решений не нашел. Помогает только если повесить @Transactional на сам метод в репозитории, но это явно не решение.
Если возник вопрос зачем ExecutorService - без него не обойтись, там сложная история (стороняя библиотека)
Вот код для примера:
@Component
@Transactional
public class TestComponent
{
@Autowired
private AccountReposiotry reposiotry;
private final ExecutorService executor = Executors.newSingleThreadExecutor();
@Scheduled(fixedDelay = 5000)
@Transactional
public void doSome()
{
executor.submit(this::delete);
}
@Transactional
public void delete()
{
try {
reposiotry.deleteByUserId(3);
}
catch (Throwable t) {
t.printStackTrace();
}
}
}