Spring批处理和作业调度

我们的团队目前运行了许多我们从过去的团队继承的预定工作,这不是很多工作,但足以让人难以跟踪 . 我们当前设置面临的主要问题是: - 无法清楚地了解运行和运行的时间 - 通知作业失败的不同方式 - 并非所有作业都支持重新运行,因为重新运行是否有效或运行良好事情变得更糟

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

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

回答(1)

2 years ago

我不确定你在这里有一个真正的问题,但是,使用Spring Batch编写的作业对于作业调度程序来说非常好 . 我已经通过AutoSys和Tivoli编写了数十个作业;不熟悉SOS,但我希望它几乎一样 .

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

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

实际上,这意味着如果作业没有作为参数传递内容,您将只能运行一次(因为该空参数集定义了唯一的 JobInstance ) .

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

总而言之,预定的Spring Batch作业并不复杂,而且运行良好 .

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

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

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