4

我正在寻找创建 java web 应用程序以生成 excel/PDf 格式的报告的最佳解决方案。类似于 Google Adwords 的东西,用户可以在其中创建计划报告并在以后生成报告时下载它。

我正在考虑开发和 java 应用程序,其中用户记录,选择预定义的报告并提供输入参数(如报告日期等),此请求将排队或保存为 Quarts 作业(首选持久队列)。作业将监视队列/作业并执行作业,生成报告(输出 excel /pdf)并存储在磁盘中。当用户稍后刷新屏幕或重新登录时,报告应该可供下载。

使用 Spring 批处理和 Quartz 调度程序我可以做到这一点吗?我也期待像 Spring admin 一样,在那里我可以看到队列中的请求数量(排队的作业),并停止队列处理等。

4

1 回答 1

4

如果您想同时处理所有报告请求,您可以使用 spring-batch,可能是在晚上,当您的服务器没有占用处理实时用户请求时(或者甚至在白天缓慢期间)。

如果您想每隔几秒/分钟/小时/等检查一次新作业,并在指定的时间间隔处理其中的一个/多个,您将使用石英作业。

所以,quartz 是一个调度器,而批处理是一个过程。您可以使用石英来安排批处理作业在特定时间运行。它们不是相互竞争的技术,它们是互补的。

关于您的问题: 鉴于您谈论队列及其持久性,但这听起来很像您的问题适合简单的 jms 模型。您将需要一些消息传递软件。如果你想让自己轻松一点,我建议使用spring-jms作为基本 Java EE JMS api 的包装器——spring 包装器比基本 jms 简单。对于消息传递服务,我会查看RabbitMQ,因为它再次非常简单。

使用 jms 架构,您可以将用户请求发布到您配置为持久的队列。您将在队列上有一个自定义侦听器,在它运行时将请求传递给报告生成器。您可以为侦听器分配一个或多个线程,这意味着您应该会发现调整报告生成器的性能很容易。

有一篇关于通过spring-integration使用 rabbitmq 的非常有用的DZone 文章(一组预构建的模式实现,有助于将事物相互连接)。

于 2013-06-08T02:36:27.177 回答