diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/jdbc/JdbcJobExecutionDao.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/jdbc/JdbcJobExecutionDao.java index 07b0de632a..fbd355e4c3 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/jdbc/JdbcJobExecutionDao.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/jdbc/JdbcJobExecutionDao.java @@ -90,18 +90,17 @@ SELECT COUNT(*) WHERE JOB_EXECUTION_ID = ? AND VERSION = ? """; - private static final String GET_JOB_EXECUTIONS = """ - SELECT JOB_EXECUTION_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, CREATE_TIME, LAST_UPDATED, VERSION - FROM %PREFIX%JOB_EXECUTION - """; - private static final String GET_LAST_JOB_EXECUTION_ID = """ SELECT JOB_EXECUTION_ID FROM %PREFIX%JOB_EXECUTION WHERE JOB_INSTANCE_ID = ? AND JOB_EXECUTION_ID IN (SELECT MAX(JOB_EXECUTION_ID) FROM %PREFIX%JOB_EXECUTION E2 WHERE E2.JOB_INSTANCE_ID = ?) """; - private static final String GET_EXECUTION_BY_ID = GET_JOB_EXECUTIONS + " WHERE JOB_EXECUTION_ID = ?"; + private static final String GET_EXECUTION_BY_ID = """ + SELECT JOB_EXECUTION_ID, JOB_INSTANCE_ID, START_TIME, END_TIME, STATUS, EXIT_CODE, EXIT_MESSAGE, CREATE_TIME, LAST_UPDATED, VERSION + FROM %PREFIX%JOB_EXECUTION + WHERE JOB_EXECUTION_ID = ? + """; private static final String GET_RUNNING_EXECUTION_FOR_INSTANCE = """ SELECT E.JOB_EXECUTION_ID @@ -136,12 +135,6 @@ SELECT COUNT(*) WHERE JOB_EXECUTION_ID = ? """; - private static final String GET_JOB_INSTANCE_ID_FROM_JOB_EXECUTION_ID = """ - SELECT JI.JOB_INSTANCE_ID - FROM %PREFIX%JOB_INSTANCE JI, %PREFIX%JOB_EXECUTION JE - WHERE JOB_EXECUTION_ID = ? AND JI.JOB_INSTANCE_ID = JE.JOB_INSTANCE_ID - """; - private static final String GET_JOB_EXECUTION_IDS_BY_INSTANCE_ID = """ SELECT JOB_EXECUTION_ID FROM %PREFIX%JOB_EXECUTION WHERE JOB_INSTANCE_ID = ? ORDER BY JOB_EXECUTION_ID DESC @@ -321,23 +314,15 @@ public JobExecution getLastJobExecution(JobInstance jobInstance) { @Override public JobExecution getJobExecution(long jobExecutionId) { - long jobInstanceId = getJobInstanceId(jobExecutionId); - JobInstance jobInstance = jobInstanceDao.getJobInstance(jobInstanceId); - JobParameters jobParameters = getJobParameters(jobExecutionId); try { return getJdbcTemplate().queryForObject(getQuery(GET_EXECUTION_BY_ID), - new JobExecutionRowMapper(jobInstance, jobParameters), jobExecutionId); + new JobExecutionRowMapper(jobInstanceDao::getJobInstance, this::getJobParameters), jobExecutionId); } catch (EmptyResultDataAccessException e) { return null; } } - private long getJobInstanceId(long jobExecutionId) { - return getJdbcTemplate().queryForObject(getQuery(GET_JOB_INSTANCE_ID_FROM_JOB_EXECUTION_ID), Long.class, - jobExecutionId); - } - @Override public Set findRunningJobExecutions(String jobName) { final Set result = new HashSet<>(); diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/jdbc/JobExecutionRowMapper.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/jdbc/JobExecutionRowMapper.java index 33be734380..4731ac83aa 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/jdbc/JobExecutionRowMapper.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/jdbc/JobExecutionRowMapper.java @@ -2,6 +2,7 @@ import java.sql.ResultSet; import java.sql.SQLException; +import java.util.function.Function; import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.ExitStatus; @@ -13,11 +14,13 @@ /** * @author Dave Syer * @author Mahmoud Ben Hassine + * @author Yanming Zhou *

* Expects a result set with the following columns: * *