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 f944dbfed9..49fc95f9f6 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 @@ -310,11 +310,13 @@ public void updateJobExecution(JobExecution jobExecution) { @Override public JobExecution getLastJobExecution(JobInstance jobInstance) { long jobInstanceId = jobInstance.getId(); - - Long lastJobExecutionId = getJdbcTemplate().queryForObject(getQuery(GET_LAST_JOB_EXECUTION_ID), Long.class, - jobInstanceId, jobInstanceId); - - return lastJobExecutionId != null ? getJobExecution(lastJobExecutionId) : null; + try { + Long lastJobExecutionId = getJdbcTemplate().queryForObject(getQuery(GET_LAST_JOB_EXECUTION_ID), Long.class, jobInstanceId, jobInstanceId); + return lastJobExecutionId != null ? getJobExecution(lastJobExecutionId) : null; + } + catch (EmptyResultDataAccessException e) { + return null; + } } @Override diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractJobDaoTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractJobDaoTests.java index 57d9aae9f6..8569d1a3b0 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractJobDaoTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/dao/AbstractJobDaoTests.java @@ -267,6 +267,17 @@ void testGetLastJobExecution() { assertEquals("jobKey", lastExecution.getJobParameters().getString("job.key")); } + @Transactional + @Test + void testGetLastJobExecutionNoExecution() { + jobExecutionDao.deleteJobExecutionParameters(jobExecution); + jobExecutionDao.deleteJobExecution(jobExecution); + + JobExecution je = jobExecutionDao.getLastJobExecution(jobInstance); + + assertNull(je); + } + /** * Trying to create instance twice for the same job+parameters causes error */