Spring Batch 中 Scheduler 定时任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Batch 中 Scheduler 定时任务相关的知识,希望对你有一定的参考价值。

参考技术A Spring batch 是一个优秀的专业的批处理框架,但是并不是一个任务调度框架。但是Spring 中也带有一个轻量级的Scheduler来帮助我们做一些事情。除此之外我们还可以选择比较有效的任务调度框架Quartz [quartz ] 可以很好的与Spring Batch 进行结合做一些更加优秀的东西。对于刚刚开始我选择用Spring 自带的轻量级的Scheduler来做个简单的demo,后续将会引入quartz来做一些东西。

这里简单配置一个job任务来讲述如何使用
此处spring batch 的reader process writer三个部分的配置在此省略,但是不影响定时任务执行的效果

运行定时任务

增加一个运行的主方法

运行app.java 就可以看到运行结果

如何评估在应用程序中是使用spring batch还是scheduler?

【中文标题】如何评估在应用程序中是使用spring batch还是scheduler?【英文标题】:How to assess whether to use spring batch or scheduler in application? 【发布时间】:2021-01-17 20:53:42 【问题描述】:

我已经在 Spring Boot 中开发了一个业务逻辑,需要每 60 天运行一次。我对是否将其转换为 Spring Batch 或使用调度程序注释有点困惑。 我应该考虑哪些所有因素来评估相同?他们中的任何一个都比另一个有优势吗? 我是调度程序批处理概念的新手,这是我第一次从事同样的工作。

【问题讨论】:

【参考方案1】:

如何判断应用中是使用spring batch还是scheduler?

Spring Batch 不是调度程序,所以它不是一个非此即彼的问题。您可以同时使用两者,例如使用调度程序来安排 Spring Batch 作业在给定时间运行。

您应该问的问题是:是否值得在 Spring Batch 作业中转换您已经在 Spring Boot 中开发的业务逻辑以从 Spring Batch 提供的功能中受益(整个应用程序可能仍然是启动应用程序)。

附带说明,由于您的作业需要每 60 天运行一次,因此使用 @Scheduled 意味着您需要运行两个月的 JVM 来运行作业。除非您同时计划将相同的 JVM 用于其他事情,否则这将是对资源的低效使用。 cron 等其他调度机制更适合这种情况。

【讨论】:

完美!感谢您让我的理解如此清晰。我认为这让我的生活更轻松,我不需要打扰我现有的 springboot 应用程序。所以为了每 60 天触发一次应用程序运行,我可以使用 crontab 代替,对吗? 我认为 crontab 更适合这样的时间表。现在,如果您同时使用 JVM 来安排其他事情,并且您更喜欢使用 @Scheduled,那么它也可以。选择正确的方法取决于您。如果有帮助,请接受答案。谢谢。

以上是关于Spring Batch 中 Scheduler 定时任务的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Cloud Data Flow 中为 Spring Batch 作业设置调度程序?

Azkaban,a batch workflow job scheduler

Spring-batch:如何在 Spring Batch 中使用 skip 方法捕获异常消息?

Spring Boot集成Spring Scheduler和Quartz Scheduler

陪你解读Spring Batch带你入手Spring Batch

spring-Scheduler