Spring batch 春批,;作业调度

Spring batch 春批,;作业调度,spring-batch,job-scheduling,Spring Batch,Job Scheduling,我们的团队目前运行许多从过去团队继承下来的计划作业,这些作业并不多,但足以让我们难以跟踪。我们目前的设置面临的主要问题是: -无法清楚了解运行的内容和时间 -通知作业失败的不同方式 -并不是所有的工作都支持重新运行,幸运的是,重新运行会起作用还是会让事情变得更糟 为此,我们一直在考虑使用SpringBatch重新编写作业,并使用SOS作业调度器来管理它们 有没有其他人使用过这种方法,或者可以推荐一种管理作业的好方法?我不确定您是否有真正的问题,但是是的,Spring Batch中编写的作业非常适

我们的团队目前运行许多从过去团队继承下来的计划作业,这些作业并不多,但足以让我们难以跟踪。我们目前的设置面临的主要问题是: -无法清楚了解运行的内容和时间 -通知作业失败的不同方式 -并不是所有的工作都支持重新运行,幸运的是,重新运行会起作用还是会让事情变得更糟

为此,我们一直在考虑使用SpringBatch重新编写作业,并使用SOS作业调度器来管理它们


有没有其他人使用过这种方法,或者可以推荐一种管理作业的好方法?

我不确定您是否有真正的问题,但是是的,Spring Batch中编写的作业非常适合使用作业调度器。我已经通过AutoSys和Tivoli编写了几十份工作计划;我不熟悉SOS,但我认为它基本上是一样的

通过SpringBatch安排作业的主要技巧是确定作业所需的参数

Spring Batch使用
JobInstance
JobExecution
的概念来管理作业;实例由作业名称和相关参数定义,而执行是尝试运行实例。一旦执行完成,实例也将完成,无法重新运行

实际上,这意味着如果一个作业不使用外部参数(即,大多数重复的计划作业),它将需要在每次运行时传入某种合成参数,因为如果不将某个参数作为参数传入,则只能运行一次(因为这组空参数定义了一个唯一的
JobInstance
).

如果作业经常运行,我会使用类似于当前时间戳的东西,它确保每个
JobInstance
都是唯一的。如果它每天运行,则传入当前日期可确保每天获得一个
JobInstance
,这有利于跟踪和重新启动

总之,计划的Spring批处理作业并不复杂,而且工作良好

编辑以回应提问者的评论:

关于SpringBatch的模型,我觉得没有意义的是,确定作业参数的逻辑都是外部化的;在很多情况下,像日期这样的参数可以很容易地由调用脚本生成,但我有很多工作对参数逻辑更为复杂


我最后做的是扩展
命令行JobRunner
,以获取一个名为
JobParameterGenerator
的新接口实例。
JobParameterGenerator
的实现通常特定于特定作业;例如,一个实现必须进行一些数据库查找,以制定作业的适当日期范围。我还创建了一个基本的
JobParameterGenerator
,它只返回当前日期时间,以便在总是新实例的作业中使用。希望这能有所帮助。

感谢您的回复。最近,我一直在努力理解SpringBatch和调度程序之间的界线,以及它们各自应该扮演的角色和相互作用的程度;我在调度程序和作业之间的划分上也遇到了一些问题。谢谢,我想这基本上回答了我的问题!!Autosys如何找到批处理作业的状态以重新运行它或采取任何类似警报的操作?@ChandreshMishra--Spring batch可以返回自定义退出代码,这是Autosys用来确定作业状态的代码。如果您在SO上搜索“Spring批处理退出代码”,您可能会找到您需要的。您还可以查看示例。