Spring Batch与Quartz Jobs的区别?

24

我是新手,想学习批处理。我尝试从简单的调度程序和作业入手,但我在spring batch 和 quartz jobs之间感到困惑。 我的理解是:

Quartz:quartz提供了框架即调度程序框架和作业框架(如果我不想使用spring batch jobs)。对吗?

Spring Batch:它只提供作业框架。我总是使用Quatz scheduler来调度spring batch jobs。Spring是否也提供自己的调度器呢?

4个回答

59

Quartz是一种调度框架,可以实现类似“每小时执行一次”或“每个月最后一个星期五执行”等功能。

Spring Batch是定义要执行的任务的框架。您可以定义一个由多个步骤组成的作业。通常,一个步骤由一个项目读取器、一个可选的项目处理器和一个项目写入器组成,但您也可以定义自定义步骤。您还可以告诉Spring Batch每处理10个项目就提交一次以及许多其他内容。

您可以使用Quartz启动Spring Batch作业。

因此,基本上Spring Batch定义了应该完成什么工作,而Quartz则定义了何时完成这些工作。


3
从Spring 3开始,您还可以安排任务- http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html 它还包括包装器,如果您仍然想使用quartz。 - Colin Rooney
那么Quartz没有像Spring一样自己的批处理/作业框架吗?我看到Quartz提供了org.quartz.Job类。这不也定义了将要执行的内容吗? - emilly
Quartz中的Job接口只提供了一个方法(execute)。在这个方法中,您可以调用任何想要执行的内容。当然,您可以在此处编写一些Java代码,但这不是Quartz框架的一部分。 - Evgeni Dimitrov
这个答案与文档中描述的相符。有关批处理的更多有用信息,请参阅此处:https://docs.spring.io/spring-batch/trunk/reference/htmlsingle/ - user3474985
这里有一篇很好的分析文章:http://techieindescribable.blogspot.com/2013/07/difference-between-spring-batch-quartz.html - pramodc84

7

官方常见问题解答中有关于这个问题的答案。

Spring Batch与Quartz有何不同?

它们两者在解决方案中是否都有用武之地? Spring Batch和Quartz具有不同的目标。Spring Batch提供了处理大量数据的功能,而Quartz提供了任务调度功能。因此,Quartz可以作为Spring Batch的补充,但并非互斥的技术。一个常见的组合是使用Quartz作为Spring Batch作业的触发器,使用Cron表达式和Spring Core方便的SchedulerFactoryBean


2

Spring提供自己的调度程序吗?

是的,可以使用Spring TaskScheduler,如下所示:

 <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>

完整示例

使用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


0

Spring Batch:从数据源(数据库中的表格、平面文件等)读取数据,处理该数据。然后将数据存储在另一个数据源中,可能是另一种格式。 我在我的博客中制作了一个tutorial,介绍如何集成Spring Boot 2、Spring Batch和Quartz。 您可以集成Spring Boot和Spring Batch,并跳过Quartz集成。 Quartz是一个调度程序,用于在未来安排任务,并具有自己的元数据表来管理作业的状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接