在长时间运行的报告生成过程中避免超时

时间:2013-09-04 07:28:09

标签: spring spring-mvc timeout

我有一个使用Spring MVC开发的webapp。我正在使用jasperReports生成一系列报告供用户下载。在其中一些报告中,通过jasper填充它们需要太长时间,这会导致事务超时,Tomcat超时或客户端的网关超时。

对于像这样的长时间运行流程,什么是好的解决方案?请注意,无论何时完成该过程,它都应以某种方式通知用户,以便他可以下载该文件。

1 个答案:

答案 0 :(得分:2)

处理此类问题最简洁的方法是与您的客户进行异步通信。

第一个请求/myApp/report?name=...&paramters...触发jasper报告以刷新报告并返回故障单ID

然后,客户端必须调用另一个URL来检索报告(例如每5秒钟)/myApp/reportDownload?ticketId=xxxxx

如果jasper线程结束并且报告准备就绪,您将发回报告,否则告诉客户端在5秒内重试,直到获得报告。

实现它的方法取决于您在前端和后端使用的技术,但是您可以在互联网上找到十几个教程。

解决此问题的最糟糕方法是增加连接器配置(http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

中的超时

HIH