我是新手,想学习批处理。我尝试从简单的调度程序和作业入手,但我在spring batch 和 quartz jobs之间感到困惑。 我的理解是:
Quartz:quartz提供了框架即调度程序框架和作业框架(如果我不想使用spring batch jobs)。对吗?
Spring Batch:它只提供作业框架。我总是使用Quatz scheduler来调度spring batch jobs。Spring是否也提供自己的调度器呢?
我是新手,想学习批处理。我尝试从简单的调度程序和作业入手,但我在spring batch 和 quartz jobs之间感到困惑。 我的理解是:
Quartz:quartz提供了框架即调度程序框架和作业框架(如果我不想使用spring batch jobs)。对吗?
Spring Batch:它只提供作业框架。我总是使用Quatz scheduler来调度spring batch jobs。Spring是否也提供自己的调度器呢?
Quartz是一种调度框架,可以实现类似“每小时执行一次”或“每个月最后一个星期五执行”等功能。
Spring Batch是定义要执行的任务的框架。您可以定义一个由多个步骤组成的作业。通常,一个步骤由一个项目读取器、一个可选的项目处理器和一个项目写入器组成,但您也可以定义自定义步骤。您还可以告诉Spring Batch每处理10个项目就提交一次以及许多其他内容。
您可以使用Quartz启动Spring Batch作业。
因此,基本上Spring Batch定义了应该完成什么工作,而Quartz则定义了何时完成这些工作。
在官方常见问题解答中有关于这个问题的答案。
Spring Batch与Quartz有何不同?
它们两者在解决方案中是否都有用武之地? Spring Batch和Quartz具有不同的目标。Spring Batch提供了处理大量数据的功能,而Quartz提供了任务调度功能。因此,Quartz可以作为Spring Batch的补充,但并非互斥的技术。一个常见的组合是使用Quartz作为Spring Batch作业的触发器,使用Cron表达式和Spring Core方便的SchedulerFactoryBean。
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>
Spring Batch:从数据源(数据库中的表格、平面文件等)读取数据,处理该数据。然后将数据存储在另一个数据源中,可能是另一种格式。 我在我的博客中制作了一个tutorial,介绍如何集成Spring Boot 2、Spring Batch和Quartz。 您可以集成Spring Boot和Spring Batch,并跳过Quartz集成。 Quartz是一个调度程序,用于在未来安排任务,并具有自己的元数据表来管理作业的状态。
org.quartz.Job
类。这不也定义了将要执行的内容吗? - emillyJob
接口只提供了一个方法(execute
)。在这个方法中,您可以调用任何想要执行的内容。当然,您可以在此处编写一些Java代码,但这不是Quartz框架的一部分。 - Evgeni Dimitrov