Как остановить работу в Spring Batch дистанционное разбиение на блоки, когда подчиненные завершены? - PullRequest
0 голосов
/ 02 января 2019

Я использую этот пример в качестве отправной точки для весеннего пакетного приложения с использованием удаленного разбиения на блоки: 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 голосов
/ 03 января 2019

Вы можете явно остановить контекст приложения мастера с помощью чего-то вроде:

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

Это обеспечит завершение работы на главной стороне, а затем закроет контекст приложения.

Пара замечаний:

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...