Я не знаю, слишком ли поздно, но я нашел компилятор Microsoft Visual C ++ для Python 2.7 , который читает
Типичное сообщение об ошибке, которое вы получите если вам нужен этот пакет компилятора, не удалось найти vcvarsall.bat
Надеюсь, что это поможет!
Проблема с вашим кодом заключается в том, что вы ожидаете, что транзакция будет запущена при вызове saveTaskResult()
. Этого не произойдет, потому что Spring использует AOP для запуска и прекращения транзакций.
Если вы получаете экземпляр транзакционного Spring-компонента из фабрики компонентов или через инъекцию зависимости, то вы получаете на самом деле прокси-сервер вокруг компонента. Этот прокси запускает транзакцию перед вызовом фактического метода и совершает или откатывает транзакцию после завершения метода.
В этом случае вы вызываете локальный метод компонента, не проходя через транзакционный прокси. Поместите метод saveTaskResult()
(аннотированный с помощью @Transactional
) в другой Spring. Вставьте этот другой компонент Spring в DemoService и вызовите другой компонент Spring из DemoService, и все будет хорошо.
Транзакции хранятся в локальном хранилище потоков. Если ваш другой метод работает с потоком с аннотацией @Transactional
. По умолчанию установлено значение REQUIRED
, и это означает, что если вы запустите метод, аннотированный с помощью @Transacitonal
из другого потока, у вас будет новая транзакция (так как в локальном хранилище этого потока нет транзакции, хранящейся в этом потоке).