我正在写一个帖子服务,记录我的活动,因为它是活动服务,它每秒调用10次,所以我必须通过异步执行来控制它,所以我去了spring任务执行器,我使用spring transaction管理员获取会话,但如果我从任务执行程序运行方法调用,我将得到以下异常。
线程中的异常" 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 :(得分:0)
如果您致电&#39; addActivityLogs&#39;方法,你基本上省略了Spring Transactions。
请查看我对类似问题的回答:Spring @Transactional TransactionRequiredException or RollbackException
长话短说:尝试用你的addActivityLogs&#39;创建另一个bean。方法并将此bean注入到运行异步任务的bean中。它应该工作。