Skip to content

Commit 3079925

Browse files
committed
Add support for delete operations in MongoDB DAOs
Partially resolved in previous commits: - eadb079 - f1cf529 - ddbb617 Resolves #5060
1 parent ddbb617 commit 3079925

File tree

5 files changed

+67
-3
lines changed

5 files changed

+67
-3
lines changed

spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/mongodb/MongoExecutionContextDao.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package org.springframework.batch.core.repository.dao.mongodb;
1717

1818
import java.util.Collection;
19+
import java.util.Collections;
1920

2021
import org.springframework.batch.core.job.JobExecution;
2122
import org.springframework.batch.core.step.StepExecution;
@@ -112,4 +113,22 @@ public void updateExecutionContext(StepExecution stepExecution) {
112113
saveExecutionContext(stepExecution);
113114
}
114115

116+
@Override
117+
public void deleteExecutionContext(JobExecution jobExecution) {
118+
Query query = new Query(where("jobExecutionId").is(jobExecution.getId()));
119+
org.springframework.batch.core.repository.persistence.ExecutionContext executionContext = new org.springframework.batch.core.repository.persistence.ExecutionContext(
120+
Collections.emptyMap(), false);
121+
Update executionContextRemovalUpdate = new Update().set("executionContext", executionContext);
122+
this.mongoOperations.updateFirst(query, executionContextRemovalUpdate, JOB_EXECUTIONS_COLLECTION_NAME);
123+
}
124+
125+
@Override
126+
public void deleteExecutionContext(StepExecution stepExecution) {
127+
Query query = new Query(where("stepExecutionId").is(stepExecution.getId()));
128+
org.springframework.batch.core.repository.persistence.ExecutionContext executionContext = new org.springframework.batch.core.repository.persistence.ExecutionContext(
129+
Collections.emptyMap(), false);
130+
Update executionContextRemovalUpdate = new Update().set("executionContext", executionContext);
131+
this.mongoOperations.updateFirst(query, executionContextRemovalUpdate, STEP_EXECUTIONS_COLLECTION_NAME);
132+
}
133+
115134
}

spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/mongodb/MongoJobExecutionDao.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.time.LocalDateTime;
2020
import java.time.LocalTime;
2121
import java.time.ZoneId;
22+
import java.util.Collections;
2223
import java.util.Date;
2324
import java.util.HashSet;
2425
import java.util.List;
@@ -33,6 +34,7 @@
3334
import org.springframework.data.domain.Sort;
3435
import org.springframework.data.mongodb.core.MongoOperations;
3536
import org.springframework.data.mongodb.core.query.Query;
37+
import org.springframework.data.mongodb.core.query.Update;
3638
import org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer;
3739
import org.springframework.util.CollectionUtils;
3840

@@ -160,6 +162,13 @@ public void deleteJobExecution(JobExecution jobExecution) {
160162

161163
}
162164

165+
@Override
166+
public void deleteJobExecutionParameters(JobExecution jobExecution) {
167+
Query query = new Query(where("jobExecutionId").is(jobExecution.getId()));
168+
Update jobParametersRemovalUpdate = new Update().set("jobParameters", Collections.emptyList());
169+
this.mongoOperations.updateFirst(query, jobParametersRemovalUpdate, JOB_EXECUTIONS_COLLECTION_NAME);
170+
}
171+
163172
private JobExecution convert(org.springframework.batch.core.repository.persistence.JobExecution jobExecution,
164173
org.springframework.batch.core.job.JobInstance jobInstance) {
165174
Set<JobParameter<?>> parameters = jobExecution.getJobParameters();

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,9 @@ void testJobExecution(@Autowired JobOperator jobOperator, @Autowired Job job) th
8181
Assertions.assertEquals(2, stepExecutionsCollection.countDocuments());
8282

8383
// dump results for inspection
84-
// dump(jobInstancesCollection, "job instance = ");
85-
// dump(jobExecutionsCollection, "job execution = ");
86-
// dump(stepExecutionsCollection, "step execution = ");
84+
dump(jobInstancesCollection, "job instance = ");
85+
dump(jobExecutionsCollection, "job execution = ");
86+
dump(stepExecutionsCollection, "step execution = ");
8787
}
8888

8989
private static void dump(MongoCollection<Document> collection, String prefix) {

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.springframework.batch.core.job.JobInstance;
2424
import org.springframework.batch.core.job.parameters.JobParameters;
2525
import org.springframework.batch.core.job.parameters.JobParametersBuilder;
26+
import org.springframework.batch.core.repository.dao.JobExecutionDao;
2627
import org.springframework.batch.core.step.StepExecution;
2728
import org.springframework.batch.core.launch.JobOperator;
2829
import org.springframework.batch.core.repository.dao.ExecutionContextDao;
@@ -107,4 +108,25 @@ void testSaveStepExecution(@Autowired JobOperator jobOperator, @Autowired Job jo
107108
assertEquals("bar", actual.get("foo"));
108109
}
109110

111+
@Test
112+
void testDeleteExecutionContext(@Autowired JobOperator jobOperator, @Autowired Job job,
113+
@Autowired ExecutionContextDao executionContextDao) throws Exception {
114+
// given
115+
JobParameters jobParameters = new JobParametersBuilder().addString("name", "foo")
116+
.addLocalDateTime("runtime", LocalDateTime.now())
117+
.toJobParameters();
118+
JobExecution jobExecution = jobOperator.start(job, jobParameters);
119+
StepExecution stepExecution = jobExecution.getStepExecutions().stream().findFirst().orElseThrow();
120+
121+
// when
122+
executionContextDao.deleteExecutionContext(jobExecution);
123+
executionContextDao.deleteExecutionContext(stepExecution);
124+
125+
// then
126+
ExecutionContext updatedJobExecutionContext = executionContextDao.getExecutionContext(jobExecution);
127+
ExecutionContext updatedStepExecutionContext = executionContextDao.getExecutionContext(stepExecution);
128+
assertTrue(updatedJobExecutionContext.isEmpty());
129+
assertTrue(updatedStepExecutionContext.isEmpty());
130+
}
131+
110132
}

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,20 @@ void testDeleteJobExecution() {
356356
assertNull(dao.getJobExecution(execution.getId()));
357357
}
358358

359+
@Test
360+
void testDeleteJobExecutionParameters() {
361+
// given
362+
JobParameters jobParameters = new JobParametersBuilder().addString("name", "foo").toJobParameters();
363+
JobExecution execution = dao.createJobExecution(jobInstance, jobParameters);
364+
365+
// when
366+
dao.deleteJobExecutionParameters(execution);
367+
368+
// then
369+
JobExecution updatedJobExecution = dao.getJobExecution(execution.getId());
370+
assertTrue(updatedJobExecution.getJobParameters().isEmpty());
371+
}
372+
359373
/*
360374
* Check to make sure the executions are equal. Normally, comparing the id's is
361375
* sufficient. However, for testing purposes, especially of a DAO, we need to make

0 commit comments

Comments
 (0)