我使用远程分块将此示例用作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);
}
}
是否可以在完成后停止应用程序?
答案 0 :(得分:0)
您可以使用类似以下内容的方式显式停止主服务器的应用程序上下文:
ConfigurableApplicationContext context = SpringApplication.run(YourMasterApp.class, args);
context.close();
这将确保主端已完成作业的运行,然后关闭应用程序上下文。
不过有几点注意事项:
jobExecution.stop()
方法中使用afterJob
是没有意义的,因为在结束作业之前,此afterJob
方法几乎是last statement。此外,此jobExecution.stop()
将在以后的版本中删除(请参见https://jira.spring.io/browse/BATCH-1987)希望这会有所帮助。