У меня есть простая одностадийная работа:Как предотвратить перезапуск 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")
Но без успеха ...
Не _skip limit_ означает, что количество исключений исключений должно игнорироваться до того, как шаг будет неудачным? Если это так, это не то, что мне нужно, я хочу, чтобы step & job был неудачным, но Job должен выполняться только один раз. –
у вас также есть предел повтора, если у вас есть предел пропуска до 0, произойдет сбой после первого исключения – Galeixo