Skip to content

Commit a631c5e

Browse files
committed
Improve JdbcJobExecutionDao::getJobExecution
`JOB_INSTANCE_ID` exists in table `JOB_EXECUTION`, no need to query it from table `JOB_INSTANCE`. Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
1 parent 5750492 commit a631c5e

File tree

3 files changed

+28
-22
lines changed

3 files changed

+28
-22
lines changed

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

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ SELECT COUNT(*)
9191
""";
9292

9393
private static final String GET_JOB_EXECUTIONS = """
94-
SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, CREATE_TIME, LAST_UPDATED, VERSION
94+
SELECT JOB_EXECUTION_ID, JOB_INSTANCE_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, CREATE_TIME, LAST_UPDATED, VERSION
9595
FROM %PREFIX%JOB_EXECUTION
9696
""";
9797

@@ -136,12 +136,6 @@ SELECT COUNT(*)
136136
WHERE JOB_EXECUTION_ID = ?
137137
""";
138138

139-
private static final String GET_JOB_INSTANCE_ID_FROM_JOB_EXECUTION_ID = """
140-
SELECT JI.JOB_INSTANCE_ID
141-
FROM %PREFIX%JOB_INSTANCE JI, %PREFIX%JOB_EXECUTION JE
142-
WHERE JOB_EXECUTION_ID = ? AND JI.JOB_INSTANCE_ID = JE.JOB_INSTANCE_ID
143-
""";
144-
145139
private static final String GET_JOB_EXECUTION_IDS_BY_INSTANCE_ID = """
146140
SELECT JOB_EXECUTION_ID FROM %PREFIX%JOB_EXECUTION WHERE JOB_INSTANCE_ID = ?
147141
ORDER BY JOB_EXECUTION_ID DESC
@@ -321,23 +315,15 @@ public JobExecution getLastJobExecution(JobInstance jobInstance) {
321315

322316
@Override
323317
public JobExecution getJobExecution(long jobExecutionId) {
324-
long jobInstanceId = getJobInstanceId(jobExecutionId);
325-
JobInstance jobInstance = jobInstanceDao.getJobInstance(jobInstanceId);
326-
JobParameters jobParameters = getJobParameters(jobExecutionId);
327318
try {
328319
return getJdbcTemplate().queryForObject(getQuery(GET_EXECUTION_BY_ID),
329-
new JobExecutionRowMapper(jobInstance, jobParameters), jobExecutionId);
320+
new JobExecutionRowMapper(jobInstanceDao::getJobInstance, this::getJobParameters), jobExecutionId);
330321
}
331322
catch (EmptyResultDataAccessException e) {
332323
return null;
333324
}
334325
}
335326

336-
private long getJobInstanceId(long jobExecutionId) {
337-
return getJdbcTemplate().queryForObject(getQuery(GET_JOB_INSTANCE_ID_FROM_JOB_EXECUTION_ID), Long.class,
338-
jobExecutionId);
339-
}
340-
341327
@Override
342328
public Set<JobExecution> findRunningJobExecutions(String jobName) {
343329
final Set<JobExecution> result = new HashSet<>();

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

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.sql.ResultSet;
44
import java.sql.SQLException;
5+
import java.util.function.Function;
56

67
import org.springframework.batch.core.BatchStatus;
78
import org.springframework.batch.core.ExitStatus;
@@ -13,11 +14,13 @@
1314
/**
1415
* @author Dave Syer
1516
* @author Mahmoud Ben Hassine
17+
* @author Yanming Zhou
1618
* <p>
1719
* Expects a result set with the following columns: *
1820
* <ul>
1921
* *
2022
* <li>JOB_EXECUTION_ID</li> *
23+
* <li>JOB_INSTANCE_ID</li> *
2124
* <li>START_TIME</li> *
2225
* <li>END_TIME</li> *
2326
* <li>STATUS</li> *
@@ -31,19 +34,21 @@
3134
*/
3235
class JobExecutionRowMapper implements RowMapper<JobExecution> {
3336

34-
private final JobInstance jobInstance;
37+
private final Function<Long, JobInstance> jobInstanceMapper;
3538

36-
private final JobParameters jobParameters;
39+
private final Function<Long, JobParameters> jobParametersMapper;
3740

38-
public JobExecutionRowMapper(JobInstance jobInstance, JobParameters jobParameters) {
39-
this.jobInstance = jobInstance;
40-
this.jobParameters = jobParameters;
41+
public JobExecutionRowMapper(Function<Long, JobInstance> jobInstanceMapper,
42+
Function<Long, JobParameters> jobParametersMapper) {
43+
this.jobInstanceMapper = jobInstanceMapper;
44+
this.jobParametersMapper = jobParametersMapper;
4145
}
4246

4347
@Override
4448
public JobExecution mapRow(ResultSet rs, int rowNum) throws SQLException {
4549
long id = rs.getLong("JOB_EXECUTION_ID");
46-
JobExecution jobExecution = new JobExecution(id, this.jobInstance, this.jobParameters);
50+
JobExecution jobExecution = new JobExecution(id, this.jobInstanceMapper.apply(rs.getLong("JOB_INSTANCE_ID")),
51+
this.jobParametersMapper.apply(id));
4752
jobExecution.setStartTime(
4853
rs.getTimestamp("START_TIME") == null ? null : rs.getTimestamp("START_TIME").toLocalDateTime());
4954
jobExecution

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
/**
4040
* @author Parikshit Dutta
4141
* @author Mahmoud Ben Hassine
42+
* @author Yanming Zhou
4243
*/
4344
public class JdbcJobExecutionDaoTests {
4445

@@ -90,6 +91,20 @@ void testCreateJobExecution() {
9091
Assertions.assertEquals(1, batchJobExecutionsCount);
9192
}
9293

94+
@Test
95+
void testGetJobExecution() {
96+
// given
97+
JobParameters jobParameters = new JobParameters();
98+
JobInstance jobInstance = jdbcJobInstanceDao.createJobInstance("job", jobParameters);
99+
100+
// when
101+
JobExecution createdJobExecution = jdbcJobExecutionDao.createJobExecution(jobInstance, jobParameters);
102+
JobExecution retrievedJobExecution = jdbcJobExecutionDao.getJobExecution(createdJobExecution.getId());
103+
104+
// then
105+
Assertions.assertEquals(createdJobExecution, retrievedJobExecution);
106+
}
107+
93108
@Test
94109
void testDeleteJobExecution() {
95110
// given

0 commit comments

Comments
 (0)