spring 批处理作业与 quartz 作业?

spring batch vs quartz jobs?

我是批处理新手。我试图从简单的调度程序和作业开始。但是我很困惑b/w spring 批处理作业与 quartz 作业。我的理解是

Quartz :- quartz 提供两个框架,即调度程序框架和作业框架(如果我不想使用 spring 批处理作业)。对吗?

Spring批处理:-它只提供作业框架。我一直使用 Quatz 调度器来安排 spring 批处理作业。 spring 是否也提供自己的调度程序?

Quartz 是一个调度框架。喜欢"execute something every hour or every last friday of the month"

Spring 批处理是一个框架,它定义了将要执行的 "something"。 您可以定义一个由步骤组成的作业。通常一个步骤是由项目 reader、可选的项目处理器和项目编写器组成的,但您可以定义自定义词干。您还可以告诉 Spring 批处理每 10 个项目和许多其他内容提交一次。

您可以使用 Quartz 启动 Spring 批处理作业。

所以基本上Spring批处理定义应该做什么,Quartz 定义什么时候应该做。

Does spring provides its own scheduler also?

是的,使用SpringTaskScheduler如下:

 <task:scheduled-tasks>
    <task:scheduled ref="runScheduler" method="run" fixed-delay="5000" />
  </task:scheduled-tasks>

  <task:scheduled-tasks>
    <task:scheduled ref="runScheduler" method="run" cron="*/5 * * * * *" />
  </task:scheduled-tasks>

full example

使用Quartz Scheduler如下:

  <!-- run every 10 seconds -->
  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
      <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="jobDetail" />
        <property name="cronExpression" value="*/10 * * * * ?" />
      </bean>
    </property>
  </bean>

full example

这个问题在official FAQ

中有答案

Spring Batch 与 Quartz 有何不同?

在解决方案中是否有适合他们的地方? Spring Batch 和 Quartz 有不同的目标。 Spring Batch 提供处理大量数据的功能,Quartz 提供调度任务的功能。所以 Quartz 可以补充 Spring Batch,但不排除技术。一个常见的组合是使用 Quartz 作为 Spring 批处理作业的触发器,使用 Cron 表达式和 Spring 核心便利 SchedulerFactoryBean.

Spring 批处理:从数据源(table 在数据库、平面文件等中读取数据),处理该数据。然后将数据存储在另一个数据源中,并且可能采用另一种格式。 我在我的博客中做了一个 tutorial 关于如何集成 Spring Boot 2、Spring batch 和 Quartz。 您可以集成 Spring 引导和 spring 批处理并跳过 Quartz 集成。 Quartz 是一个在未来安排任务的调度器,它有自己的元数据 tables 来管理作业的状态。