当前位置: 首页 > 知识库问答 >
问题:

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

何烨华
2023-03-14

我正在寻找最好的解决方案,以创建一个java web应用程序,以生成Excel/PDF格式的报告。类似于Google Adwords的东西,用户可以创建日程报告,并在以后生成报告时下载。

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

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

共有1个答案

孟跃
2023-03-14

如果您希望同时处理所有报表请求,那么您可以使用spring-batch,可能是在晚上,当您的服务器没有处理实时用户请求的时候(甚至是在白天的缓慢时段)。

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

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

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

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

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

 类似资料:
  • 24.2. 使用OpenSymphony Quartz 调度器 Quartz使用Trigger, Job以及JobDetail等对象来进行各种类型的任务调度。关于Quartz的基本概念,请参阅http://www.opensymphony.com/quartz。为了让基于Spring的应用程序方便使用,Spring提供了一些类来简化uartz的用法。 24.2.1. 使用JobDetailBean

  • 背景:我们有一些由spring batch管理的作业(作为启动应用程序)由cron job触发,我正在努力用quartz替换cron并添加spring batch admin来管理作业。 到目前为止,我能够通过spring batch管理控制台运行这些作业,当quartz试图启动作业执行时,问题就会发生。JobLauncher、JobLocator对象为空,这是autowired。请注意,我使用基

  • 这是我第一次存储作业,并使用crontrigger使用下面的代码对作业进行调度。 详细信息存储在表中--、&

  • 我们有一个.NET项目,它检查远程计算机上是否存在一个文件。我们需要对一个部门内的多台远程计算机(数千台)执行此操作,每台计算机每天都在预定义的时间执行。执行时间是在数据库中指定的,它经常变化,每台远程计算机的执行时间都是不同的(有些可能是相同的)。为了实现这一点,我们计划使用Quartz调度器。由于我们是石英的新手,我们想知道如何实现这一点。在高层,我们需要这些- 调度程序应该在每天的特定时间启