Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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<JobExecution> findRunningJobExecutions(String jobName) {
final Set<JobExecution> result = new HashSet<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -13,11 +14,13 @@
/**
* @author Dave Syer
* @author Mahmoud Ben Hassine
* @author Yanming Zhou
* <p>
* Expects a result set with the following columns: *
* <ul>
* *
* <li>JOB_EXECUTION_ID</li> *
* <li>JOB_INSTANCE_ID</li> *
* <li>START_TIME</li> *
* <li>END_TIME</li> *
* <li>STATUS</li> *
Expand All @@ -31,19 +34,21 @@
*/
class JobExecutionRowMapper implements RowMapper<JobExecution> {

private final JobInstance jobInstance;
private final Function<Long, JobInstance> jobInstanceMapper;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure the name Mapper and Converter which one is better.


private final JobParameters jobParameters;
private final Function<Long, JobParameters> jobParametersMapper;

public JobExecutionRowMapper(JobInstance jobInstance, JobParameters jobParameters) {
this.jobInstance = jobInstance;
this.jobParameters = jobParameters;
public JobExecutionRowMapper(Function<Long, JobInstance> jobInstanceMapper,
Function<Long, JobParameters> jobParametersMapper) {
this.jobInstanceMapper = jobInstanceMapper;
this.jobParametersMapper = jobParametersMapper;
}

@Override
public JobExecution mapRow(ResultSet rs, int rowNum) throws SQLException {
long id = rs.getLong("JOB_EXECUTION_ID");
JobExecution jobExecution = new JobExecution(id, this.jobInstance, this.jobParameters);
JobExecution jobExecution = new JobExecution(id, this.jobInstanceMapper.apply(rs.getLong("JOB_INSTANCE_ID")),
this.jobParametersMapper.apply(id));
jobExecution.setStartTime(
rs.getTimestamp("START_TIME") == null ? null : rs.getTimestamp("START_TIME").toLocalDateTime());
jobExecution
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
/**
* @author Parikshit Dutta
* @author Mahmoud Ben Hassine
* @author Yanming Zhou
*/
public class JdbcJobExecutionDaoTests {

Expand Down Expand Up @@ -90,6 +91,20 @@ void testCreateJobExecution() {
Assertions.assertEquals(1, batchJobExecutionsCount);
}

@Test
void testGetJobExecution() {
// given
JobParameters jobParameters = new JobParameters();
JobInstance jobInstance = jdbcJobInstanceDao.createJobInstance("job", jobParameters);

// when
JobExecution createdJobExecution = jdbcJobExecutionDao.createJobExecution(jobInstance, jobParameters);
JobExecution retrievedJobExecution = jdbcJobExecutionDao.getJobExecution(createdJobExecution.getId());

// then
Assertions.assertEquals(createdJobExecution, retrievedJobExecution);
}

@Test
void testDeleteJobExecution() {
// given
Expand Down