大家好,我正在使用 Struts1.1,点击 JSP 中的按钮后,我们需要处理大量数据,其中涉及数据库验证,对于数百万条记录,这需要 2 个多小时。所以我们想在后台使用执行器服务和java的未来任务异步执行。这样用户可以在后台处理完成时自由移动到其他页面,当这个过程完成后,用户可以回到同一个jsp点击另一个按钮(处理完成后激活)查看数据处理结果:这是我的动作类:
ServletContext servletContext=getServlet().getServletContext();
ExecutorService poolService = (ExecutorService) servletContext.getAttribute("threadPoolAlias");
AdminBlocageBackgroundProcessing adminBlocageBackgroundProcessing= new AdminBlocageBackgroundProcessing(fichier,blocage);
Future<ArrayList> future= poolService.submit(adminBlocageBackgroundProcessing);
这是我完成数据库验证的模型类:
public class AdminBlocageBackgroundProcessing implements Callable {
private FormFile fichier;
private String blocage;
public ArrayList data=null;
public AdminBlocageBackgroundProcessing(FormFile fichier, String data) {
this.fichier=fichier;
this.blocage=data;
// TODO Auto-generated constructor stub
}
public Object call( ) {
// TODO Auto-generated method stub
try{
data = ImportMetier.extractFromCSV(
new String(fichier.getFileData(),
"ISO-8859-1"),blocage);
}
catch (Exception e) {
e.printStackTrace();
}
return data;
}
现在我的问题是我如何设法在应用程序级别监控这个“调用”方法的执行,以便在它完成时我可以显示数据处理的结果。
最重要的是我想在后台执行它,以便用户可以在应用程序的其他部分自由移动,所以我不能使用
data=future.get();
因为它会导致主线程等待直到调用方法没有完成。
提前致谢 :-)