Spring @Scheduled @Transactional javax.persistence.TransactionRequiredException - PullRequest
0 голосов
/ 12 декабря 2018

Я разрабатываю приложение Springboot.Локально, в моем IntelliJ, все работает как положено, без каких-либо ошибок или исключений.

Есть настройка докера через Rancher.Я могу развернуть встроенный Java-артефакт в Docker-контейнер.Он запускается и подключается к своей базе данных и почти работает как положено.

Проблема в задании Java-Spring- @ Scheduled Job, которое выдает исключение при запуске:

2018-12-12_15:08:57.223 TESTING-X [SockJS-6] [ERROR] o.s.s.s.TaskUtils$LoggingErrorHandler:95 - Unexpected error occurred in scheduled task.
javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:282)
at com.sun.proxy.$Proxy118.remove(Unknown Source)
at com.xyz.DataAccessImpl.delete(DataAccessImpl.java:684)
at com.xyz.services.QmStatisticService.lambda$refreshStatistics$3(QmStatisticService.java:155)
at java.util.ArrayList.forEach(ArrayList.java:1249)
...
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Чтения выполняются запросом и успешно работают.- Удаление не выполняется.
Удаление выполняется с помощью оператора EntityManager.remove(entity).Установкой является org.springframework.orm.jpa.JtaTransactionManager;см. ниже ...

Почему система по-разному обрабатывает транзакции в другой среде.
У кого-нибудь есть подсказки, как это исправить, или у него есть подсказка, чтобы задать дополнительный вопрос, который может помочь ...

фрагмент кода:

@Bean
@Autowired
public JpaTransactionManager transactionManagerEntityManagerFactory(EntityManagerFactory emf) {

    // https://stackoverflow.com/questions/12337504/hibernatetransactionmanager-or-jpatransactionmanager
    final JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(emf);
    LOG.info( "using PlatformTransactionManager: "+ transactionManager );
    return transactionManager;
}

Редактировать : Я подозревал, что версии Java работают на разных компьютерах.
На моем локальном компьютере я запускаюJDK-1.8 на докеризированной установке есть только JRE-1.8 ... Я исследую и делюсь своими выводами ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...