Java 说服产品经理更改长时间运行的同步流程的设计

Java 说服产品经理更改长时间运行的同步流程的设计,java,web-applications,java-ee-5,Java,Web Applications,Java Ee 5,在我们的web应用程序中,我们有一个功能: 获取产品列表 将它们写入excel文件 将excel文件返回给用户以供下载 此过程需要更多时间,具体取决于>2分钟的产品数量。有些请求需要5分钟以上!用户平均下载100-500个产品,请求大约需要1-5分钟 我认为1分钟对于任何web服务器线程来说都太长了,无法在任何单个请求上处于活动状态。除此之外,进程本身会导致服务器内存不足错误并导致崩溃 我想让他们相信,这是一种不好的做法,因此必须通过引用软件架构师撰写的文章、书籍或研究来改变设计,并提出在这种情

在我们的web应用程序中,我们有一个功能:

  • 获取产品列表
  • 将它们写入excel文件
  • 将excel文件返回给用户以供下载
  • 此过程需要更多时间,具体取决于>2分钟的产品数量。有些请求需要5分钟以上!用户平均下载100-500个产品,请求大约需要1-5分钟

    我认为1分钟对于任何web服务器线程来说都太长了,无法在任何单个请求上处于活动状态。除此之外,进程本身会导致服务器内存不足错误并导致崩溃

    我想让他们相信,这是一种不好的做法,因此必须通过引用软件架构师撰写的文章、书籍或研究来改变设计,并提出在这种情况下应该做什么的建议

    有人知道这样的书/文章/研究吗


    如果您不同意我的假设,即1分钟对于任何web服务器线程来说都太长,无法在单个请求上激活,请告诉我原因

    您是否尝试重新思考生成xls的逻辑?因为如果这是一个业务需求,那么他们可能真的不愿意改变它(在那里,那样做了)


    我使用ApachePOI生成xls和创建报告,并获得令人满意的性能(生成报告的时间最多为几秒)。我们使用服务器端缓存来缓存数据。然后,我们只需拉出xls。

    如果正在下载的卓越列表是固定的,您可以考虑在后台线程中生成它们,并返回一个直接链接供下载。即使它每小时或每两小时改变一次,也值得这样做,而不是按需生成

    另一种方法是,当用户选择产品列表并请求Excel提供选项时,如果他们希望接收带有下载链接的电子邮件,甚至希望接收作为电子邮件附件的文件。如果他们接受,则将每个请求提交到队列并运行批处理作业,该批处理作业将生成Excel工作表并将其作为邮件附件发送。这样就不会限制web服务器

    此外,我的主要问题是,为什么这需要一分钟以上,而这一过程的哪一部分需要很长时间。这方面值得研究一下(数据库连通性{池,共同定位服务器},大型表{分区},excel生成)

    是否向每个excel添加固定图形?如果是这样,请使用已经有页眉/页脚等的模板

    值得重新审视造成瓶颈的部分,而不是盲目地说这是一个糟糕的设计/方法


    调查可能会解决当前的问题,或者至少你不会在未来的设计中继续犯同样的错误。你能告诉我如何缓存数据的线索吗?我们在该功能中使用POI,即使如此,该过程仍然需要很长时间。不确定您的体系结构是什么,但缓存可以简单到使用ehcache和hibernate,使用OSCache()缓存复杂对象。此外,计时器任务还可用于定期提取数据并将其缓存(在OSCache中)。因此,excel生成逻辑必须完成最少的工作。