从命令行启动停止Spring Batch作业

时间:2011-10-18 13:07:14

标签: spring-batch

可以通过告诉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等以外没有办法停止作业吗?

2 个答案:

答案 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开关将起作用,但只会在当前执行步骤完成后停止作业。它不会立即杀死这份工作。