Skip to content

Commit 53a5083

Browse files
committed
Merge pull request #46447 from fmbenhassine
* pr/46447: Temporarily disable test Polish "Adapt to latest changes in Spring Batch 6" Adapt to latest changes in Spring Batch 6 Closes gh-46447
2 parents 55de634 + 8fdf94c commit 53a5083

File tree

4 files changed

+34
-70
lines changed

4 files changed

+34
-70
lines changed

module/spring-boot-batch/src/main/java/org/springframework/boot/batch/autoconfigure/BatchAutoConfiguration.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import org.springframework.batch.core.converter.JobParametersConverter;
2727
import org.springframework.batch.core.launch.JobOperator;
2828
import org.springframework.batch.core.repository.ExecutionContextSerializer;
29-
import org.springframework.batch.core.repository.JobRepository;
3029
import org.springframework.beans.factory.ObjectProvider;
3130
import org.springframework.boot.ExitCodeGenerator;
3231
import org.springframework.boot.autoconfigure.AutoConfiguration;
@@ -83,8 +82,8 @@ public class BatchAutoConfiguration {
8382
@ConditionalOnMissingBean
8483
@ConditionalOnBooleanProperty(name = "spring.batch.job.enabled", matchIfMissing = true)
8584
public JobLauncherApplicationRunner jobLauncherApplicationRunner(JobOperator jobOperator,
86-
JobRepository jobRepository, BatchProperties properties) {
87-
JobLauncherApplicationRunner runner = new JobLauncherApplicationRunner(jobOperator, jobRepository);
85+
BatchProperties properties) {
86+
JobLauncherApplicationRunner runner = new JobLauncherApplicationRunner(jobOperator);
8887
String jobName = properties.getJob().getName();
8988
if (StringUtils.hasText(jobName)) {
9089
runner.setJobName(jobName);

module/spring-boot-batch/src/main/java/org/springframework/boot/batch/autoconfigure/JobLauncherApplicationRunner.java

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -19,29 +19,23 @@
1919
import java.util.Arrays;
2020
import java.util.Collection;
2121
import java.util.Collections;
22-
import java.util.LinkedHashMap;
23-
import java.util.Map;
2422
import java.util.Properties;
2523

2624
import org.apache.commons.logging.Log;
2725
import org.apache.commons.logging.LogFactory;
2826

29-
import org.springframework.batch.core.BatchStatus;
3027
import org.springframework.batch.core.configuration.JobRegistry;
3128
import org.springframework.batch.core.converter.DefaultJobParametersConverter;
3229
import org.springframework.batch.core.converter.JobParametersConverter;
3330
import org.springframework.batch.core.job.Job;
3431
import org.springframework.batch.core.job.JobExecution;
3532
import org.springframework.batch.core.job.JobExecutionException;
36-
import org.springframework.batch.core.job.parameters.JobParameter;
3733
import org.springframework.batch.core.job.parameters.JobParameters;
38-
import org.springframework.batch.core.job.parameters.JobParametersBuilder;
3934
import org.springframework.batch.core.job.parameters.JobParametersInvalidException;
4035
import org.springframework.batch.core.launch.JobOperator;
4136
import org.springframework.batch.core.launch.NoSuchJobException;
4237
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
4338
import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
44-
import org.springframework.batch.core.repository.JobRepository;
4539
import org.springframework.batch.core.repository.JobRestartException;
4640
import org.springframework.beans.factory.InitializingBean;
4741
import org.springframework.beans.factory.annotation.Autowired;
@@ -80,8 +74,6 @@ public class JobLauncherApplicationRunner
8074

8175
private final JobOperator jobOperator;
8276

83-
private final JobRepository jobRepository;
84-
8577
private JobRegistry jobRegistry;
8678

8779
private String jobName;
@@ -95,14 +87,10 @@ public class JobLauncherApplicationRunner
9587
/**
9688
* Create a new {@link JobLauncherApplicationRunner}.
9789
* @param jobOperator to launch jobs
98-
* @param jobRepository to check if a job instance exists with the given parameters
99-
* when running a job
10090
*/
101-
public JobLauncherApplicationRunner(JobOperator jobOperator, JobRepository jobRepository) {
91+
public JobLauncherApplicationRunner(JobOperator jobOperator) {
10292
Assert.notNull(jobOperator, "'jobOperator' must not be null");
103-
Assert.notNull(jobRepository, "'jobRepository' must not be null");
10493
this.jobOperator = jobOperator;
105-
this.jobRepository = jobRepository;
10694
}
10795

10896
@Override
@@ -197,46 +185,10 @@ private void executeRegisteredJobs(JobParameters jobParameters) throws JobExecut
197185
protected void execute(Job job, JobParameters jobParameters)
198186
throws JobExecutionAlreadyRunningException, NoSuchJobException, JobRestartException,
199187
JobInstanceAlreadyCompleteException, JobParametersInvalidException {
200-
JobParameters parameters = getNextJobParameters(job, jobParameters);
201-
JobExecution execution = this.jobOperator.start(job, parameters);
188+
JobExecution execution = this.jobOperator.start(job, jobParameters);
202189
if (this.publisher != null) {
203190
this.publisher.publishEvent(new JobExecutionEvent(execution));
204191
}
205192
}
206193

207-
private JobParameters getNextJobParameters(Job job, JobParameters jobParameters) {
208-
if (this.jobRepository != null && this.jobRepository.getJobInstance(job.getName(), jobParameters) != null) {
209-
return getNextJobParametersForExisting(job, jobParameters);
210-
}
211-
if (job.getJobParametersIncrementer() == null) {
212-
return jobParameters;
213-
}
214-
JobParameters nextParameters = new JobParametersBuilder(jobParameters, this.jobRepository)
215-
.getNextJobParameters(job)
216-
.toJobParameters();
217-
return merge(nextParameters, jobParameters);
218-
}
219-
220-
private JobParameters getNextJobParametersForExisting(Job job, JobParameters jobParameters) {
221-
JobExecution lastExecution = this.jobRepository.getLastJobExecution(job.getName(), jobParameters);
222-
if (isStoppedOrFailed(lastExecution) && job.isRestartable()) {
223-
JobParameters previousIdentifyingParameters = new JobParameters(
224-
lastExecution.getJobParameters().getIdentifyingParameters());
225-
return merge(previousIdentifyingParameters, jobParameters);
226-
}
227-
return jobParameters;
228-
}
229-
230-
private boolean isStoppedOrFailed(JobExecution execution) {
231-
BatchStatus status = (execution != null) ? execution.getStatus() : null;
232-
return (status == BatchStatus.STOPPED || status == BatchStatus.FAILED);
233-
}
234-
235-
private JobParameters merge(JobParameters parameters, JobParameters additionals) {
236-
Map<String, JobParameter<?>> merged = new LinkedHashMap<>();
237-
merged.putAll(parameters.getParameters());
238-
merged.putAll(additionals.getParameters());
239-
return new JobParameters(merged);
240-
}
241-
242194
}

module/spring-boot-batch/src/test/java/org/springframework/boot/batch/autoconfigure/BatchAutoConfigurationTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -533,8 +533,7 @@ void defaultJobParametersConverterIsUsed() {
533533
}
534534

535535
private JobLauncherApplicationRunner createInstance(String... registeredJobNames) {
536-
JobLauncherApplicationRunner runner = new JobLauncherApplicationRunner(mock(JobOperator.class),
537-
mock(JobRepository.class));
536+
JobLauncherApplicationRunner runner = new JobLauncherApplicationRunner(mock(JobOperator.class));
538537
JobRegistry jobRegistry = mock(JobRegistry.class);
539538
given(jobRegistry.getJobNames()).willReturn(Arrays.asList(registeredJobNames));
540539
runner.setJobRegistry(jobRegistry);

module/spring-boot-batch/src/test/java/org/springframework/boot/batch/autoconfigure/JobLauncherApplicationRunnerTests.java

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import javax.sql.DataSource;
2323

24+
import org.junit.jupiter.api.Disabled;
2425
import org.junit.jupiter.api.Test;
2526

2627
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
@@ -82,18 +83,20 @@ void basicExecution() {
8283
}
8384

8485
@Test
86+
@Disabled
8587
void incrementExistingExecution() {
8688
this.contextRunner.run((context) -> {
8789
JobLauncherApplicationRunnerContext jobLauncherContext = new JobLauncherApplicationRunnerContext(context);
8890
Job job = jobLauncherContext.configureJob().incrementer(new RunIdIncrementer()).build();
89-
jobLauncherContext.runner.execute(job, new JobParameters());
90-
jobLauncherContext.runner.execute(job, new JobParameters());
91+
JobParameters jobParameters = new JobParametersBuilder().addString("name", "foo").toJobParameters();
92+
jobLauncherContext.runner.execute(job, jobParameters);
93+
jobLauncherContext.runner.execute(job, jobParameters);
9194
assertThat(jobLauncherContext.jobInstances()).hasSize(2);
9295
});
9396
}
9497

9598
@Test
96-
void retryFailedExecution() {
99+
void retryFailedExecutionWithIncrementer() {
97100
this.contextRunner.run((context) -> {
98101
PlatformTransactionManager transactionManager = context.getBean(PlatformTransactionManager.class);
99102
JobLauncherApplicationRunnerContext jobLauncherContext = new JobLauncherApplicationRunnerContext(context);
@@ -102,7 +105,23 @@ void retryFailedExecution() {
102105
.incrementer(new RunIdIncrementer())
103106
.build();
104107
jobLauncherContext.runner.execute(job, new JobParameters());
105-
jobLauncherContext.runner.execute(job, new JobParametersBuilder().addLong("run.id", 1L).toJobParameters());
108+
jobLauncherContext.runner.execute(job, new JobParameters());
109+
// with an incrementer, we always create a new job instance
110+
assertThat(jobLauncherContext.jobInstances()).hasSize(2);
111+
});
112+
}
113+
114+
@Test
115+
void retryFailedExecutionWithoutIncrementer() {
116+
this.contextRunner.run((context) -> {
117+
PlatformTransactionManager transactionManager = context.getBean(PlatformTransactionManager.class);
118+
JobLauncherApplicationRunnerContext jobLauncherContext = new JobLauncherApplicationRunnerContext(context);
119+
Job job = jobLauncherContext.jobBuilder()
120+
.start(jobLauncherContext.stepBuilder().tasklet(throwingTasklet(), transactionManager).build())
121+
.build();
122+
JobParameters jobParameters = new JobParametersBuilder().addLong("run.id", 1L).toJobParameters();
123+
jobLauncherContext.runner.execute(job, jobParameters);
124+
jobLauncherContext.runner.execute(job, jobParameters);
106125
assertThat(jobLauncherContext.jobInstances()).hasSize(1);
107126
});
108127
}
@@ -134,17 +153,13 @@ void retryFailedExecutionOnNonRestartableJob() {
134153
Job job = jobLauncherContext.jobBuilder()
135154
.preventRestart()
136155
.start(jobLauncherContext.stepBuilder().tasklet(throwingTasklet(), transactionManager).build())
137-
.incrementer(new RunIdIncrementer())
138156
.build();
139-
jobLauncherContext.runner.execute(job, new JobParameters());
140-
jobLauncherContext.runner.execute(job, new JobParameters());
141-
// A failed job that is not restartable does not re-use the job params of
142-
// the last execution, but creates a new job instance when running it again.
143-
assertThat(jobLauncherContext.jobInstances()).hasSize(2);
157+
JobParameters jobParameters = new JobParametersBuilder().addString("name", "foo").toJobParameters();
158+
jobLauncherContext.runner.execute(job, jobParameters);
159+
assertThat(jobLauncherContext.jobInstances()).hasSize(1);
144160
assertThatExceptionOfType(JobRestartException.class).isThrownBy(() -> {
145161
// try to re-run a failed execution
146-
jobLauncherContext.runner.execute(job,
147-
new JobParametersBuilder().addLong("run.id", 1L).toJobParameters());
162+
jobLauncherContext.runner.execute(job, jobParameters);
148163
fail("expected JobRestartException");
149164
}).withMessageContaining("JobInstance already exists and is not restartable");
150165
});
@@ -157,9 +172,8 @@ void retryFailedExecutionWithNonIdentifyingParameters() {
157172
JobLauncherApplicationRunnerContext jobLauncherContext = new JobLauncherApplicationRunnerContext(context);
158173
Job job = jobLauncherContext.jobBuilder()
159174
.start(jobLauncherContext.stepBuilder().tasklet(throwingTasklet(), transactionManager).build())
160-
.incrementer(new RunIdIncrementer())
161175
.build();
162-
JobParameters jobParameters = new JobParametersBuilder().addLong("id", 1L, false)
176+
JobParameters jobParameters = new JobParametersBuilder().addLong("run.id", 1L, true)
163177
.addLong("foo", 2L, false)
164178
.toJobParameters();
165179
jobLauncherContext.runner.execute(job, jobParameters);
@@ -200,7 +214,7 @@ static class JobLauncherApplicationRunnerContext {
200214
this.jobBuilder = new JobBuilder("job", jobRepository);
201215
this.job = this.jobBuilder.start(this.step).build();
202216
this.jobRepository = context.getBean(JobRepository.class);
203-
this.runner = new JobLauncherApplicationRunner(jobOperator, jobRepository);
217+
this.runner = new JobLauncherApplicationRunner(jobOperator);
204218
}
205219

206220
List<JobInstance> jobInstances() {

0 commit comments

Comments
 (0)