2

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

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

4

1 回答 1

4

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

第一个请求/myApp/report?name=...&paramters...触发jasper report刷新报告并返回ticket id

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

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

实现它的方式取决于你在前端和后端使用的技术,但你会在互联网上找到几十个教程。

修复它的最坏方法是增加连接器配置中的超时时间(http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

HIH

于 2013-09-04T08:26:00.503 回答