Spring定时任务和Spring批处理任务有什么区别?

18

我不理解在Spring中定时任务(scheduled tasks)批处理任务(batch jobs)之间的区别。 所谓定时任务是指像这样配置的任务:

@EnableScheduling 
public class AppConfig{
..

并被用作

@Scheduled(fixedRate=550)
public void doSomething(){
..

所谓批处理作业,指的是以下这些:

@EnableBatchProcessing
public class AppConfig{
..

还有很多实现方式,例如: Jobs, Job launcher, Steps, ItemReader, ItemWriter 等等。

除了实现差异之外,我想知道它们之间的主要区别,我也很好奇为什么要使用批处理任务,并制作许多长时间的实现,而我们可以使用简单的定时任务。我的意思是,定时作业的实现非常容易,但也许它们与批处理作业相比存在缺点?


2
看一下我的回答 https://dev59.com/M1wX5IYBdhLWcg3w8TXM 它是关于Quartz的,但基本上Quartz有一个类似于@Scheduled的概念,只不过更强大。 - Evgeni Dimitrov
它不应该仅仅关于Quartz,因为Spring Boot中还有一个Quartz调度程序。即使如此,我也想了解批处理作业与Quartz调度程序之间的区别。 - wertigom
我知道的两个方面:第一,当作业运行失败时,在第二次运行时,它将使用相同的作业参数运行...至少我认为你可以配置这个。这种错误情况比在同一个地方手动编写所有内容更容易进行配置(您的计划方法)。其次,也许批处理可以为您的代码提供结构,当您还必须从某处读取数据并将其写入其他地方时...批处理具有某种阅读器、处理器、编写器模式...还有一些数据库表和自动创建的批处理作业结果..例如作业开始时间等等。 - akcasoy
@akcasoy,这就是我要找的答案,请写在回答中,我会接受它作为正确答案。 - wertigom
2个回答

17

Spring Scheduler用于基于时间表编排任务。Spring Batch是一个强大的批处理框架,专为解决复杂的计算问题而设计。Spring Batch不会处理任务编排,它只负责创建任务。如果需要编排Spring Batch任务,可以使用Spring Scheduler。


3
我能想到的两个方面:据我所知,当作业运行失败时,在第二次运行时,它将使用相同的作业参数运行..至少我认为你可以配置这个。而且,这种错误情况比在同一个地方手动编写所有内容更容易进行配置(您的计划方法)。其次,也许批处理可以为您的代码提供结构,当您还必须从某个地方读取数据并将其写入另一个地方时…批处理具有某种阅读器、处理器、编写器模式。此外,还有一些自动生成的数据库表(BATCH_JOB_INSTANCE)和批处理作业结果..例如作业开始时间等。
编辑:批处理的更多原因:大量数据、事务管理、基于块的处理、声明性I/O、启动/停止/重新启动、重试/跳过、基于Web的管理界面。

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