停止服务器请求

时间:2012-01-19 16:41:58

标签: java tomcat request report

我有一个网络应用程序(java,tomcat),允许用户通过水晶报告生成报告。问题是如果用户请求一个需要数小时才能完成的大型报告,我的整个应用程序都会停止运行。有没有办法停止这样的请求,比如5分钟后还没有完成?除了优化速度和限制报告大小之外,还有其他解决方法吗?

2 个答案:

答案 0 :(得分:2)

我认为您没有在另一个线程中运行报告生成。最好在另一个Thread中运行报告生成,并在准备就绪时将链接发送回用户。

您可以使用java的ExecutorService并为该线程设置一些超时,如果它花费的时间超过您为其分配的时间,它将过期。

搜索Java ExecutorService,Future,Callable教程

示例代码:

 Callable<Integer> callable = new CallableImpl(2);
  ExecutorService executor = new ScheduledThreadPoolExecutor(5);
  Future<Integer> future = executor.submit(callable);
  Integer result = future.get(600,TimeUnit.seconds));

答案 1 :(得分:1)

另一种方法是在单独的线程中运行报告生成(或者使用ExecutorService),并在生成时间超过某个阈值时调用Thread.interrupt()。如果线程当前在I / O(网络,数据库)上阻塞,则线程将被中断。