我需要创建一个进程来查询Web服务以提取信息,然后将数据保存在我的数据库中。但是,因为这个过程非常耗费时间,所以我想让它在后台运行。
目前,我有一个mysql -uUSER -pPASS -hHOST -e "SELECT * FROM db.table;"
,它由UI中的按钮调用。此处理程序创建一个ProcessHandler
,它应该在后台运行该进程。但是,我收到Thread
消息HibernateException
。
我在其中一个配置xml文件(有几个)中定义了No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
,如下所示(这是一个非常通用的定义):
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);
}
}
定义为(我的一个)配置xml文件中的bean时的剩余部分。
任何人都可以通过向我提供有关如何解决此问题的一些提示来帮助我吗?