春季批次&工作安排

时间:2014-06-19 20:47:44

标签: spring-batch job-scheduling

我们的团队目前运行了一些我们从过去的团队继承的预定工作,这不是很多工作,但足以让人难以跟踪。我们当前设置面临的主要问题是: - 没有清楚地了解什么运行和何时运行 - 通知失败的不同方式 - 并非所有工作都支持重新运行,因为重新运行是否会起作用或使事情变得更糟,这是个好运。

为此,我们一直在寻找使用Spring Batch重写我们的工作并使用SOS Job Scheduler来管理它们。

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

1 个答案:

答案 0 :(得分:4)

我不确定你在这里有一个真正的问题,但是,使用Spring Scheduler编写的作业很适合作业调度程序。我已经通过AutoSys和Tivoli编写了数十个作业;不熟悉SOS,但我希望它几乎一样。

通过Spring Batch安排作业的主要技巧是确定您的工作所需的参数。

Spring Batch使用JobInstanceJobExecution的概念来管理工作;实例由作业名称和关联参数定义,而执行是尝试运行实例。执行完成后,实例也会完成,无法重新运行。

实际上,这意味着如果作业不使用外部参数(即大多数重复的预定作业),则每次运行时都需要传递某种合成参数,因为如果您没有将某些内容作为参数传递,你只能运行一次(因为那组空参数定义了唯一的JobInstance)。

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

总而言之,预定的Spring Batch作业并不复杂,而且效果很好。

根据提问者的评论进行编辑:

对我来说对Spring Batch的模型没有意义的一点是,确定作业参数的逻辑都是外化的;在很多情况下,调用脚本可以很容易地生成日期之类的参数,但这种情况可能很好,但是我有很多工作对参数逻辑更复杂。

我最终做的是扩展CommandLineJobRunner以获取名为JobParameterGenerator的新接口的实例。 JobParameterGenerator的实施通常特定于特定工作;例如,一个实现必须执行一些数据库查找以为该作业制定适当的日期范围。我还创建了一个基本的JobParameterGenerator,它只返回当前的DateTime,用于总是新实例的作业。希望这会有所帮助。