2017-02-17 40 views
0

Я хочу запускать два задания один за другим. Да, я делал поиск в Интернете, но у них есть решения, которые включают добавление второй работы в качестве шага в первом. Но у меня разные требования. Я получаю уведомление после завершения первого запуска пакетных заданий, а второй запускается только после получения этого уведомления. Возможно ли запустить два задания один за другим в Spring boot. Пожалуйста, помогите!Запуск 2-го задания-партии после завершения 1-го задания Весенняя загрузка

+0

Есть ли [мой ответ] (http://stackoverflow.com/questions/41364220/how-to-run-spring-batch-jobs-in-certain-order-spring-boot/41437552#41437552) помощь? –

ответ

0

Может быть самым простым решением является добавить JobExecutionListener для обратного вызова после завершения FirstJob. И в AfterJob callback запустите второй Job. Поскольку вы получаете execContext из FirstJob, вы можете применить стратегию запуска задания на основе Job.

public class KpJobListener implements JobExecutionListener { 

    private final static Logger LOG = LoggerFactory.getLogger(KpJobListener.class); 

    private Job job; 
    private JobLauncher jobLauncher; 

    public KpJobListener(final Job job, final JobLauncher jobLauncher) { 
     this.job = job; 
     this.jobLauncher = jobLauncher; 
    } 

    @Override 
    public void beforeJob(JobExecution jobExecution) { 
     LOG.info("Strarting job {}"); 
    } 

    @Override 
    public void afterJob(JobExecution jobExecution) { 
     LOG.info("Job is completed job"); 
     CompletableFuture.runAsync(()->{ 
      try { 
       jobLauncher.run(job, new JobParametersBuilder().toJobParameters()); 
      } catch (JobExecutionAlreadyRunningException | JobRestartException | JobInstanceAlreadyCompleteException 
        | JobParametersInvalidException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     }); 
    } 

} 

Образец Спринг-batch.xml

<batch:job id="kpJob1" incrementer="jobIncrementer" 
     restartable="true"> 
     <batch:listeners> 
      <batch:listener> 
       <bean class="com.kp.job.KpJobListener"> 
        <constructor-arg name="job" ref="kpJob2" /> 
        <constructor-arg name="jobLauncher" ref="jobLauncher" /> 
       </bean> 
      </batch:listener> 
     </batch:listeners> 
     <batch:step id="kpJob1.step1" allow-start-if-complete="true"> 
      <batch:tasklet> 
       <bean class="com.kp.job.step.task.KpTasklet" /> 
      </batch:tasklet> 
     </batch:step> 
    </batch:job> 

Вы можете улучшить этот подход для службы обмена сообщениями, который может быть аккуратным дизайном.