Commit 560ffc90 authored by james's avatar james Committed by Stephane Nicoll

Do not attempt to restart non-restartable jobs

Closes gh-3830
parent cd1ace0c
......@@ -144,7 +144,7 @@ public class JobLauncherCommandLineRunner implements CommandLineRunner,
parameters = incrementer.getNext(new JobParameters());
}
}
else if (isStoppedOrFailed(previousExecution)) {
else if (isStoppedOrFailed(previousExecution) && job.isRestartable()) {
// Retry a failed or stopped execution
parameters = previousExecution.getJobParameters();
// Non-identifying additional parameters can be added to a retry
......
......@@ -16,6 +16,8 @@
package org.springframework.boot.autoconfigure.batch;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import org.springframework.batch.core.Job;
......@@ -43,8 +45,6 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.SyncTaskExecutor;
import org.springframework.transaction.PlatformTransactionManager;
import static org.junit.Assert.assertEquals;
/**
* Tests for {@link JobLauncherCommandLineRunner}.
*
......@@ -124,6 +124,24 @@ public class JobLauncherCommandLineRunnerTests {
assertEquals(1, this.jobExplorer.getJobInstances("job", 0, 100).size());
}
@Test
public void retryFailedExecutionOnNonRestartableJob() throws Exception {
this.job = this.jobs.get("job").preventRestart()
.start(this.steps.get("step").tasklet(new Tasklet() {
@Override
public RepeatStatus execute(StepContribution contribution,
ChunkContext chunkContext) throws Exception {
throw new RuntimeException("Planned");
}
}).build()).incrementer(new RunIdIncrementer()).build();
this.runner.execute(this.job, new JobParameters());
this.runner.execute(this.job, new JobParameters());
/* A failed job that is not restartable does not re-use the job params of
* the last execution, but creates a new job instance when running it again.
*/
assertEquals(2, this.jobExplorer.getJobInstances("job", 0, 100).size());
}
@Test
public void retryFailedExecutionWithNonIdentifyingParameters() throws Exception {
this.job = this.jobs.get("job")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment