Не удалось получить сеанс с синхронизацией транзакций для текущего потока при запуске сеанса спящего режима из потока ScheduledExecutorService [duplicate]

Я не знаю, слишком ли поздно, но я нашел компилятор Microsoft Visual C ++ для Python 2.7 , который читает

Типичное сообщение об ошибке, которое вы получите если вам нужен этот пакет компилятора, не удалось найти vcvarsall.bat

Надеюсь, что это поможет!

12
задан DataNucleus 1 July 2012 в 09:45
поделиться

2 ответа

Проблема с вашим кодом заключается в том, что вы ожидаете, что транзакция будет запущена при вызове saveTaskResult(). Этого не произойдет, потому что Spring использует AOP для запуска и прекращения транзакций.

Если вы получаете экземпляр транзакционного Spring-компонента из фабрики компонентов или через инъекцию зависимости, то вы получаете на самом деле прокси-сервер вокруг компонента. Этот прокси запускает транзакцию перед вызовом фактического метода и совершает или откатывает транзакцию после завершения метода.

В этом случае вы вызываете локальный метод компонента, не проходя через транзакционный прокси. Поместите метод saveTaskResult() (аннотированный с помощью @Transactional) в другой Spring. Вставьте этот другой компонент Spring в DemoService и вызовите другой компонент Spring из DemoService, и все будет хорошо.

17
ответ дан Manos Nikolaidis 28 August 2018 в 01:46
поделиться

Транзакции хранятся в локальном хранилище потоков. Если ваш другой метод работает с потоком с аннотацией @Transactional. По умолчанию установлено значение REQUIRED, и это означает, что если вы запустите метод, аннотированный с помощью @Transacitonal из другого потока, у вас будет новая транзакция (так как в локальном хранилище этого потока нет транзакции, хранящейся в этом потоке).

3
ответ дан naXa 28 August 2018 в 01:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: