【发布时间】:2023-03-13 02:20:02
【问题描述】:
我需要创建一个进程来查询 Web 服务以提取信息,然后将数据保存在我的数据库中。但是,由于这个过程非常耗时,我想让它在后台运行。
目前,我有一个ProcessHandler,它由 UI 中的按钮调用。此处理程序创建一个Thread,它应该在后台运行该进程。但是,我收到了 HibernateException 和消息 No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here。
我在一个配置xml文件(有几个)中定义了ProcessHandler,如下(这是一个非常通用的定义):
<bean class="com.project.ProcessHandler" parent="parentHandler" />
在ProcessHandler内部,调用这个过程的代码也很通用:
Thread t = new Thread(new WorkerThread(alphaManager, bravoManager, charlieManager));
t.start();
这是WorkerThread的当前实现:
public class WorkerThread implements Runnable {
private Manager alphaManager;
private Manager bravoManager;
private Manager charlieManager;
public WorkerThread() {
this.alphaManager = null;
this.bravoManager = null;
this.charlieManager= null;
}
public WorkerThread(Manager alphaManager, Manager bravoManager, Manager charlieManager) {
this.alphaManager = alphaManager;
this.bravoManager = bravoManager;
this.charlieManager= charlieManager;
}
@Override
public void run() {
// code to query webservice and extract data...
saveToDbMethod(data);
}
@Transactional(propagation = Propagation.REQUIRED)
private void saveToDbMethod(String data) {
// code to process data...
alphaManager.save(entityA);
bravoManager.save(entityB);
charlieManager.save(entityC);
}
}
默认构造函数是我尝试将 WorkerThread 定义为我的配置 xml 文件(之一)中的 bean 时留下的。
谁能帮我解决这个问题?
【问题讨论】:
标签: java spring multithreading hibernate