可以通过告诉JVM运行CommandLineJobRunner从命令行启动Spring Batch作业。根据{{3}},使用添加的参数-stop
运行相同的命令将停止作业:
可以在命令行上提供此类的参数 (用空格分隔),或通过stdin(用新行分隔)。他们 如下:
jobPath jobIdentifier(jobParameters)*命令行选项为 如下
jobPath
:包含作业的xml应用程序上下文-restart
:(可选)重新启动上次失败的执行-stop
:(可选)停止正在执行的执行-abandon
:(可选)放弃已停止的执行-next
:(可选)根据Job jobIdentifier中的JobParametersIncrementer启动序列中的下一个:作业名称或作业执行ID(for -stop,-andandon或-restart) )。jobParameters
:0到多个参数,用于启动以key = value对形式指定的作业。
但是,在main()方法的JavaDoc上,未指定-stop参数。浏览docjar.com上的代码,我看不到-stop参数的任何使用情况。
我怀疑是否可以停止从命令行启动的批处理,但仅当正在运行的批处理由非瞬态jobRepository
支持时?如果在命令行上运行只在HSQL中存储数据的批处理(即在内存中),除了CTRL-C
等以外没有办法停止作业吗?
答案 0 :(得分:1)
停止命令已实施,请参阅source for CommandLineJobRunner,第300行+
if (opts.contains("-stop")) {
List<JobExecution> jobExecutions = getRunningJobExecutions(jobIdentifier);
if (jobExecutions == null) {
throw new JobExecutionNotRunningException("No running execution found for job=" + jobIdentifier);
}
for (JobExecution jobExecution : jobExecutions) {
jobExecution.setStatus(BatchStatus.STOPPING);
jobRepository.update(jobExecution);
}
return exitCodeMapper.intValue(ExitStatus.COMPLETED.getExitCode());
}
答案 1 :(得分:1)
stop
开关将起作用,但只会在当前执行步骤完成后停止作业。它不会立即杀死这份工作。