Я пишу один почтовый сервис, чтобы регистрировать мои действия, а так как это служба активности, она вызывает 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);
}
}
Я не могу получить доступ к инъецированному bean-компоненту внутри метода run, если я поместил всю логику в метод run, тогда также получаю такое же исключение – Balaji