2016-12-12 6 views
0

У меня есть простая одностадийная работа:Как предотвратить перезапуск Spring Batch Job от перезапуска при шаге?

@Bean(name = "restProcessorJob") 
public Job job(@Qualifier("step") Step step) throws Exception { 
    return jobBuilderFactory.get("restProcessorJob") 
      .start(step) 
      .build(); 
} 

И если есть исключение во время этапа выполнения, Batch структура будет пытаться выполнить его сразу же.

2016-12-12 18:49:45.558 INFO 10872 --- [   main] o.s.b.c.l.support.SimpleJobLauncher  : Job: [SimpleJob: [name=restProcessorJob]] launched with the following parameters: [{id=1481568585432}] 
2016-12-12 18:49:45.572 INFO 10872 --- [   main] o.s.batch.core.job.SimpleStepHandler  : Executing step: [step] 
2016-12-12 18:49:45.597 DEBUG 10872 --- [   main] o.s.web.client.RestTemplate    : Created GET request for "http://myhost:myport.." 
2016-12-12 18:49:45.646 DEBUG 10872 --- [   main] o.s.web.client.RestTemplate    : Setting request Accept header to [application/json, application/*+json] 
2016-12-12 18:49:46.670 ERROR 10872 --- [   main] o.s.batch.core.step.AbstractStep   : Encountered an error executing step step in job restProcessorJob 

org.springframework.web.client.ResourceAccessException: I/O error on GET request Connection refused: connect; nested exception is java.net.ConnectException: Connection refused: connect 
    ... 

2016-12-12 18:49:46.689 INFO 10872 --- [   main] o.s.b.c.l.support.SimpleJobLauncher  : Job: [SimpleJob: [name=restProcessorJob]] completed with the following parameters: [{id=1481568585432}] and the following status: [FAILED] 
2016-12-12 18:49:46.690 INFO 10872 --- [   main] o.s.b.a.b.JobLauncherCommandLineRunner : Running default command line with: [] 
2016-12-12 18:49:46.727 INFO 10872 --- [   main] o.s.b.c.l.support.SimpleJobLauncher  : Job: [SimpleJob: [name=restProcessorJob]] launched with the following parameters: [{id=1481568585432}] 
2016-12-12 18:49:46.736 INFO 10872 --- [   main] o.s.batch.core.job.SimpleStepHandler  : Executing step: [step] 
... 

Есть ли способ настроить такое поведение и не запускать работу дважды при сбое?

EDIT:

кажется, что я нашел источник проблемы. Приложение Spring boot пытается запустить каждый найденный CommandLineRunner в контексте. В моем случае это org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner. Я пытался исключить этот класс:

@EnableAutoConfiguration(excludeName="org.springframework.boot.autoconfigure.batch.JobLauncherCommandLineRunner") 

Но без успеха ...

ответ

0

Вы можете настроить его в конфигурационном файле, вы можете положить предел пропуска до 0

+0

Не _skip limit_ означает, что количество исключений исключений должно игнорироваться до того, как шаг будет неудачным? Если это так, это не то, что мне нужно, я хочу, чтобы step & job был неудачным, но Job должен выполняться только один раз. –

+0

у вас также есть предел повтора, если у вас есть предел пропуска до 0, произойдет сбой после первого исключения – Galeixo

0

использование .preventRestart с инкрементором

@Bean(name = "restProcessorJob") 
public Job job(@Qualifier("step") Step step) throws Exception { 
    return jobBuilderFactory.get("restProcessorJob") 
      .start(step) 
      .incrementer(new RunIdIncrementer()) 
      .preventRestart() 
      .build(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^