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