从站完成后,如何在Spring Batch远程分块中停止Job?

时间:2019-01-02 20:31:36

标签: java spring-batch

我使用远程分块将此示例用作spring batch app的起点: https://github.com/benas/spring-batch-remote-chunking-sample/blob/master/src/main/java/io/github/benas/MasterConfiguration.java 在此示例中,我添加了自定义阅读器/编写器,但未更改任何配置。该示例工作正常,除了所有奴隶都完成之后我无法停止工作。

我尝试使用JobListner来停止“ afterJob”方法中的作业,但没有结果。

public class MyJobExecutionListener implements JobExecutionListener {

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

}

@Override
public void afterJob(JobExecution jobExecution) {

    System.out.println("afterJob start~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    System.out.println(jobExecution.getExitStatus().getExitCode());
    System.out.println(jobExecution.getExitStatus().getExitDescription());
    System.out.println(jobExecution.getStartTime());
    System.out.println(jobExecution.getEndTime());
    System.out.println(jobExecution.isRunning());
    System.out.println(jobExecution.isStopping());

    jobExecution.stop();

    System.out.println("!!!!!!!!!");
    System.out.println(jobExecution.isRunning());
    System.out.println(jobExecution.isStopping());
    System.out.println(jobExecution.getEndTime());


    System.out.println("afterJob end~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}

}

jobExecution.getExitStatus()。getExitCode()已完成 jobExecution.isStopping()为true,但该应用程序仍在运行。

要运行该应用程序,我正在使用SpringBoot(而不是像示例中那样将其作为单元测试运行)

@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class AppStarter {

   public static void main(String[] args) {

      System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!! start");
      SpringApplication.run(AppStarter.class, args);

   }
}

是否可以在完成后停止应用程序?

1 个答案:

答案 0 :(得分:0)

您可以使用类似以下内容的方式显式停止主服务器的应用程序上下文:

ConfigurableApplicationContext context = SpringApplication.run(YourMasterApp.class, args);
context.close();

这将确保主端已完成作业的运行,然后关闭应用程序上下文。

不过有几点注意事项:

希望这会有所帮助。