我有一个使用Spring MVC开发的webapp。我正在使用jasperReports生成一系列报告供用户下载。在其中一些报告中,通过jasper填充它们需要太长时间,这会导致事务超时,Tomcat超时或客户端的网关超时。
对于像这样的长时间运行流程,什么是好的解决方案?请注意,无论何时完成该过程,它都应以某种方式通知用户,以便他可以下载该文件。
答案 0 :(得分:2)
处理此类问题最简洁的方法是与您的客户进行异步通信。
第一个请求/myApp/report?name=...¶mters...
触发jasper报告以刷新报告并返回故障单ID
然后,客户端必须调用另一个URL来检索报告(例如每5秒钟)/myApp/reportDownload?ticketId=xxxxx
如果jasper线程结束并且报告准备就绪,您将发回报告,否则告诉客户端在5秒内重试,直到获得报告。
实现它的方法取决于您在前端和后端使用的技术,但是您可以在互联网上找到十几个教程。
解决此问题的最糟糕方法是增加连接器配置(http://tomcat.apache.org/tomcat-7.0-doc/config/http.html)
中的超时HIH