Skip to content

Commit 0125b19

Browse files
committed
Fix order when retrieving job executions with JobExecutionDao
This commit fixes the JDBC DAO. The MongoDB DAO was fixed in f1cf529 Resolves #5062
1 parent 3079925 commit 0125b19

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/jdbc/JdbcJobExecutionDao.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ SELECT COUNT(*)
144144

145145
private static final String GET_JOB_EXECUTION_IDS_BY_INSTANCE_ID = """
146146
SELECT JOB_EXECUTION_ID FROM %PREFIX%JOB_EXECUTION WHERE JOB_INSTANCE_ID = ?
147+
ORDER BY JOB_EXECUTION_ID DESC
147148
""";
148149

149150
JdbcJobInstanceDao jobInstanceDao;
@@ -217,10 +218,10 @@ public List<JobExecution> findJobExecutions(final JobInstance jobInstance) {
217218
Assert.notNull(jobInstance, "Job instance cannot be null.");
218219
long jobInstanceId = jobInstance.getId();
219220
// TODO optimize to a single query with a join if possible
220-
List<Long> jobExecutionIds = getJdbcTemplate().queryForList(getQuery(GET_JOB_EXECUTION_IDS_BY_INSTANCE_ID),
221-
Long.class, jobInstanceId);
222-
List<JobExecution> jobExecutions = new ArrayList<>(jobExecutionIds.size());
223-
for (Long jobExecutionId : jobExecutionIds) {
221+
List<Long> jobExecutionIdsSortedBackwardByCreationOrder = getJdbcTemplate()
222+
.queryForList(getQuery(GET_JOB_EXECUTION_IDS_BY_INSTANCE_ID), Long.class, jobInstanceId);
223+
List<JobExecution> jobExecutions = new ArrayList<>(jobExecutionIdsSortedBackwardByCreationOrder.size());
224+
for (Long jobExecutionId : jobExecutionIdsSortedBackwardByCreationOrder) {
224225
jobExecutions.add(getJobExecution(jobExecutionId));
225226
}
226227
return jobExecutions;

spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/jdbc/JdbcJobExecutionDaoTests.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@
1919
import java.time.LocalDateTime;
2020
import java.time.LocalTime;
2121
import java.util.Date;
22-
23-
import javax.transaction.Transactional;
22+
import java.util.List;
2423

2524
import org.junit.jupiter.api.Assertions;
2625
import org.junit.jupiter.api.BeforeEach;
@@ -155,4 +154,21 @@ void testJobParametersPersistenceRoundTrip() {
155154
Assertions.assertEquals(doubleParameter, parameters.getDouble("double"));
156155
}
157156

157+
@Test
158+
void testFindJobExecutionsInOrder() {
159+
// given
160+
JobParameters jobParameters = new JobParametersBuilder().addString("name", "foo").toJobParameters();
161+
JobInstance jobInstance = jdbcJobInstanceDao.createJobInstance("job", jobParameters);
162+
JobExecution jobExecution1 = jdbcJobExecutionDao.createJobExecution(jobInstance, jobParameters);
163+
JobExecution jobExecution2 = jdbcJobExecutionDao.createJobExecution(jobInstance, jobParameters);
164+
165+
// when
166+
List<JobExecution> jobExecutions = jdbcJobExecutionDao.findJobExecutions(jobInstance);
167+
168+
// then
169+
Assertions.assertEquals(2, jobExecutions.size());
170+
Assertions.assertEquals(jobExecution2.getId(), jobExecutions.get(0).getId());
171+
Assertions.assertEquals(jobExecution1.getId(), jobExecutions.get(1).getId());
172+
}
173+
158174
}

0 commit comments

Comments
 (0)