Skip to content

Commit 894f9f9

Browse files
hpoettkerfmbenhassine
authored andcommitted
Let SimpleJobRepository#deleteJobInstance delete corresponding step executions
Resolves #4382
1 parent d8d76ab commit 894f9f9

File tree

2 files changed

+29
-38
lines changed

2 files changed

+29
-38
lines changed

spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2006-2023 the original author or authors.
2+
* Copyright 2006-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -328,7 +328,7 @@ public void deleteJobExecution(JobExecution jobExecution) {
328328

329329
@Override
330330
public void deleteJobInstance(JobInstance jobInstance) {
331-
List<JobExecution> jobExecutions = this.jobExecutionDao.findJobExecutions(jobInstance);
331+
List<JobExecution> jobExecutions = findJobExecutions(jobInstance);
332332
for (JobExecution jobExecution : jobExecutions) {
333333
deleteJobExecution(jobExecution);
334334
}

spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java

+27-36
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2008-2022 the original author or authors.
2+
* Copyright 2008-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -32,12 +32,13 @@
3232

3333
import java.time.LocalDateTime;
3434
import java.time.temporal.ChronoUnit;
35-
import java.util.Arrays;
35+
import java.util.List;
36+
import java.util.Map;
3637

3738
import static org.junit.jupiter.api.Assertions.assertEquals;
3839
import static org.junit.jupiter.api.Assertions.assertNotNull;
40+
import static org.junit.jupiter.api.Assertions.assertNull;
3941
import static org.junit.jupiter.api.Assertions.assertThrows;
40-
import static org.junit.jupiter.api.Assertions.fail;
4142

4243
/**
4344
* Repository tests using JDBC DAOs (rather than mocks).
@@ -152,11 +153,7 @@ void testGetStepExecutionCountAndLastStepExecution() throws Exception {
152153
@Transactional
153154
@Test
154155
void testSaveExecutionContext() throws Exception {
155-
ExecutionContext ctx = new ExecutionContext() {
156-
{
157-
putLong("crashedPosition", 7);
158-
}
159-
};
156+
ExecutionContext ctx = new ExecutionContext(Map.of("crashedPosition", 7));
160157
JobExecution jobExec = jobRepository.createJobExecution(job.getName(), jobParameters);
161158
jobExec.setStartTime(LocalDateTime.now());
162159
jobExec.setExecutionContext(ctx);
@@ -169,11 +166,6 @@ void testSaveExecutionContext() throws Exception {
169166
StepExecution retrievedStepExec = jobRepository.getLastStepExecution(jobExec.getJobInstance(), step.getName());
170167
assertEquals(stepExec, retrievedStepExec);
171168
assertEquals(ctx, retrievedStepExec.getExecutionContext());
172-
173-
// JobExecution retrievedJobExec =
174-
// jobRepository.getLastJobExecution(jobExec.getJobInstance());
175-
// assertEquals(jobExec, retrievedJobExec);
176-
// assertEquals(ctx, retrievedJobExec.getExecutionContext());
177169
}
178170

179171
/*
@@ -205,7 +197,7 @@ void testGetLastJobExecution() throws Exception {
205197
jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters);
206198
StepExecution stepExecution = new StepExecution("step1", jobExecution);
207199
jobRepository.add(stepExecution);
208-
jobExecution.addStepExecutions(Arrays.asList(stepExecution));
200+
jobExecution.addStepExecutions(List.of(stepExecution));
209201
assertEquals(jobExecution, jobRepository.getLastJobExecution(job.getName(), jobParameters));
210202
assertEquals(stepExecution, jobExecution.getStepExecutions().iterator().next());
211203
}
@@ -233,42 +225,41 @@ void testReExecuteWithSameJobParameters() throws Exception {
233225
*/
234226
@Transactional
235227
@Test
236-
public void testReExecuteWithSameJobParametersWhenRunning() throws Exception {
228+
void testReExecuteWithSameJobParametersWhenRunning() throws Exception {
237229
JobParameters jobParameters = new JobParametersBuilder().addString("stringKey", "stringValue")
238230
.toJobParameters();
239231

240232
// jobExecution with status STARTING
241233
JobExecution jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters);
242-
try {
243-
jobRepository.createJobExecution(job.getName(), jobParameters);
244-
fail();
245-
}
246-
catch (JobExecutionAlreadyRunningException e) {
247-
// expected
248-
}
234+
assertThrows(JobExecutionAlreadyRunningException.class,
235+
() -> jobRepository.createJobExecution(job.getName(), jobParameters));
249236

250237
// jobExecution with status STARTED
251238
jobExecution.setStatus(BatchStatus.STARTED);
252239
jobExecution.setStartTime(LocalDateTime.now());
253240
jobRepository.update(jobExecution);
254-
try {
255-
jobRepository.createJobExecution(job.getName(), jobParameters);
256-
fail();
257-
}
258-
catch (JobExecutionAlreadyRunningException e) {
259-
// expected
260-
}
241+
assertThrows(JobExecutionAlreadyRunningException.class,
242+
() -> jobRepository.createJobExecution(job.getName(), jobParameters));
261243

262244
// jobExecution with status STOPPING
263245
jobExecution.setStatus(BatchStatus.STOPPING);
264246
jobRepository.update(jobExecution);
265-
try {
266-
jobRepository.createJobExecution(job.getName(), jobParameters);
267-
fail();
268-
}
269-
catch (JobExecutionAlreadyRunningException e) {
270-
// expected
271-
}
247+
assertThrows(JobExecutionAlreadyRunningException.class,
248+
() -> jobRepository.createJobExecution(job.getName(), jobParameters));
249+
}
250+
251+
@Transactional
252+
@Test
253+
void testDeleteJobInstance() throws Exception {
254+
var jobParameters = new JobParametersBuilder().addString("foo", "bar").toJobParameters();
255+
var jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters);
256+
var stepExecution = new StepExecution("step", jobExecution);
257+
jobRepository.add(stepExecution);
258+
259+
jobRepository.deleteJobInstance(jobExecution.getJobInstance());
260+
261+
assertEquals(0, jobRepository.findJobInstancesByName(job.getName(), 0, 1).size());
262+
assertNull(jobRepository.getLastJobExecution(job.getName(), jobParameters));
272263
}
273264

274265
}

0 commit comments

Comments
 (0)