使用spring-batch或Quartz调度器调度作业



我正在寻找最好的解决方案来创建一个java web应用程序,以生成excel/PDf格式的报告。一些类似于谷歌广告词的东西,用户可以创建时间表报告,并在稍后生成报告时下载。

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

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

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

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

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

关于你的问题:考虑到你谈论的是队列及其持久性,但听起来你的问题很适合一个简单的jms模型。你需要一些信息软件。如果您想让自己轻松一点,我建议使用springjms作为基本JavaEEJMSAPi的包装器——springjms的包装器比基本jms简单。对于消息服务,我会考虑RabbitMQ,因为它同样非常简单。

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

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

最新更新