如何使用旧作业参数重新启动 spring 批处理失败的作业

how to restart spring batch failed job with old job paramters

我在我的工作参数中传递时间。在 运行 我的工作之后,我可以在控制台中看到我的工作以时间参数开始:-

作业:[FlowJob:[name=DB2-SQL-LOAD56]] 使用以下参数启动:[{Time=1590853755581}]

我想知道如果我的作业失败我该如何重新启动作业,因为每次我的作业失败时,它都会运行一个新实例,因为它会获取当前时间(作为作业参数传递)

如何使用旧时间参数(如上所述)重新启动失败的作业?

我是否需要在我的代码中添加逻辑来接受时间参数?如果是,我该如何处理?

我附上了我的代码。如果有人能帮助我重新开始失败的工作,我将不胜感激。

@SpringBootApplication
public class Db2MySqlLoadApplication implements CommandLineRunner {

@Autowired
private JobLauncher jobLauncher;

@Autowired
private Job job;


public static void main(String args[]) {
    SpringApplication.run(Db2MySqlLoadApplication.class, args);
}


@Override
public void run(String... args) throws Exception {


    JobParameters params = new JobParametersBuilder()
                    .addLong("Time" ,System.currentTimeMillis())
            .toJobParameters();
    jobLauncher.run(job, params);
}
}

因为你使用Spring引导,所以你真的不需要实现CommandLineRunner。 Spring Boot 已经为您提供了 JobLauncherCommandLineRunner。您可以做的是删除此 run 方法(请注意,您的情况未使用 args 参数)并从命令行启动您的作业,如:

java -jar myjob.jar Time=$(date +%s)

此示例在 unix/linux 上使用 date +%s 命令,该命令将当前日期作为自 Unix 纪元以来的时间戳,如果您在 MS windows.

有了这个,如果你想用以前的 Time 参数重新启动一个特定的作业实例,你可以按如下方式传递以前的值:

java -jar myjob.jar Time=1590853755581