2015-11-18 5 views
1

Я пишу один почтовый сервис, чтобы регистрировать мои действия, а так как это служба активности, она вызывает 10 раз в секунду, поэтому я должен ее контролировать выполняя асинхронно, поэтому я отправился на роль Spring task executor, и я использую Spring manager manager для получения сеанса, но если я вызову из метода выполнения задачи, я получаю следующее исключение.Ошибка: не удалось получить синхронизированный с транзакцией сеанс для текущего потока с исполнителем пружинных задач

Исключение в потоке "executorWithPoolSizeRange-1" org.hibernate.HibernateException: Не удалось получить транзакции синхронизированных сессий для текущего потока

вы можете проверить после моего кода

public void saveActivityLogs(final List<UserActivityEntity> activityLogs,final String clientIP,final int clientPort){ 
    logger.info("Saving activiytlogs"); 
    /*for(UserActivityEntity activitylog:activityLogs){ 
     activitylog.setClientIp(clientIP); 
     activitylog.setClientPort(clientPort); 
     this.commonDAO.saveActivityLogs(activitylog); 
    } */ 
    executorWithPoolSizeRange.execute(new Runnable() { 
     public void run() { 
      addActivityLogs(activityLogs,clientIP,clientPort); 
     } 
    }); 
} 
/** 
    this method will call from above one 
*/ 
@Transactional(propagation = Propagation.REQUIRES_NEW) 
public void addActivityLogs(List<UserActivityEntity> activityLogs,String clientIP,int clientPort){ 
    for(UserActivityEntity activitylog:activityLogs){ 
     activitylog.setClientIp(clientIP); 
     activitylog.setClientPort(clientPort); 
     this.commonDAO.saveActivityLogs(activitylog); 
    } 

} 

ответ

0

Если вы называете addActivityLogs 'таким образом, что вы в основном не используете Spring Transactions.

Пожалуйста, проверьте мой ответ на аналогичный вопрос: Spring @Transactional TransactionRequiredException or RollbackException

Короче говоря: попытаться создать еще один компонент с методом «addActivityLogs» и вводить этот компонент в один, который работает ваши задачи асинхронных. Тогда он должен работать.

+1

Я не могу получить доступ к инъецированному bean-компоненту внутри метода run, если я поместил всю логику в метод run, тогда также получаю такое же исключение – Balaji

Смежные вопросы

 Смежные вопросы