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

问题描述 投票:0回答:1

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

Job:[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-batch jobs restart
1个回答
0
投票

由于使用了Spring Boot,因此您实际上不需要实现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
© www.soinside.com 2019 - 2024. All rights reserved.