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