【问题标题】:Spring batch stop a job春季批量停工
【发布时间】:2018-02-03 15:25:12
【问题描述】:

如何在春季批次停止工作?我尝试使用以下代码使用此方法:

public class jobListener implements JobExecutionListener{

  @Override
  public void beforeJob(JobExecution jobExecution) {
    jobExecution.setExitStatus(ExitStatus.STOPPED);

  }


  @Override
  public void afterJob(JobExecution jobExecution) {
    // TODO Auto-generated method stub

  }
}

我也尝试过 COMPLETED,FAILED 但此方法不起作用,作业继续执行。有什么解决办法吗?

【问题讨论】:

标签: spring spring-batch


【解决方案1】:

您可以使用 JobOperator 和 JobExplorer 从作业外部停止作业(请参阅https://docs.spring.io/spring-batch/reference/html/configureJob.html#JobOperator)。方法是stop(long executionId) 你必须使用 JobExplorer 找到正确的 executionId 才能停止。

您还可以在作业流程配置中将作业配置为在基于退出状态的步骤执行后停止(请参阅https://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html#stopElement)。

【讨论】:

  • 它会终止进程还是仅仅标记作业执行已停止
【解决方案2】:

我假设您想通过给定名称停止作业。 这是代码。

String jobName = jobExecution.getJobInstance().getJobName(); // in most cases
DataSource dataSource = ... //@Autowire it in your code
JobOperator jobOperator = ... //@Autowire it in your code
JobExplorerFactoryBean factory = new JobExplorerFactoryBean();
factory.setDataSource(dataSource);
factory.setJdbcOperations(new JdbcTemplate(dataSource));
JobExplorer jobExplorer = factory.getObject();
Set<JobExecution> jobExecutions = jobExplorer.findRunningJobExecutions(jobName);
jobExecutions.forEach(jobExecution -> jobOperator.stop(jobExecution.getId()));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2016-05-23
    相关资源
    最近更新 更多