错误:无法使用spring任务执行程序获取当前线程的事务同步会话

时间:2015-11-18 06:39:33

标签: spring asynchronous spring-transactions

我正在写一个帖子服务,记录我的活动,因为它是活动服务,它每秒调用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);
    }   

}

1 个答案:

答案 0 :(得分:0)

如果您致电&#39; addActivityLogs&#39;方法,你基本上省略了Spring Transactions。

请查看我对类似问题的回答:Spring @Transactional TransactionRequiredException or RollbackException

长话短说:尝试用你的addActivityLogs&#39;创建另一个bean。方法并将此bean注入到运行异步任务的bean中。它应该工作。