我正在创建一个JSP页面,其中有一个上传按钮(用于上传XLS以及稍后在数据库中更新此数据)。一旦用户单击“上载”按钮,它将读取XLS文件并准备将传递给方法(m1(列表a))以执行SQL查询的对象列表。 现在问题是我在这个方法中有大约100个sql查询(m1(列表a)),大约需要30分钟才能完成。 所以我不希望用户等到这个方法完成数据库进程。 有没有办法可以调用我的方法来更新数据库而不等待这个数据库操作的响应,我可以回复用户该文件已经上传并且数据库进程已经启动,将在一段时间后完成。
答案 0 :(得分:1)
将请求 - 响应周期之外的工作移交给ExecutorService。
private void doDatabaseWork(Input input) {
BackgroundWorkTask task = new BackgroundWorkTask(input);
executorService.submit(task);
// since the work is now handed off to a separate pool of
// threads, the current HTTP-handling thread will continue
// here and return a response to the user
}
public class BackgroundWorkTask implements Runnable {
public void run() {
// put all of your database querying operations in here
}
}
确保,因为这是一个webapp,您可以在Web应用程序停止时关闭ExecutorService - 这也将使ExecutorService有机会在允许容器停止之前完成任何正在进行的工作。