使用spring批处理或仅使用Quartz调度程序调度作业

时间:2012-12-06 12:40:50

标签: spring queue quartz-scheduler scheduling

我正在寻找创建java Web应用程序以生成excel / PDf格式报告的最佳解决方案。类似于谷歌Adwords的一些东西,用户可以创建日程安排报告,并在以后生成报告时下载。

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

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

1 个答案:

答案 0 :(得分:3)

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

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

因此,quartz是一个调度程序,批处理是一个过程。您可以使用quartz来安排批处理作业在特定时间运行。它们不是竞争技术,而是免费的。

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

使用jms体系结构,您可以将用户请求发布到队列,您已将其配置为持久性。您在队列上有一个自定义侦听器,每当它运行时都会将请求传递给报表生成器。您可以将一个或多个线程分配给侦听器,这意味着您应该可以轻松地调整报表生成器的性能。

有一个非常有用的DZone article关于通过spring-integration使用rabbitmq(一组预先构建的模式实现,可以帮助彼此连接)。