diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java index 1955aef9f..26ef998bb 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java @@ -327,8 +327,12 @@ public class SimpleJobRepository implements JobRepository { } public JobExecution getLastJobExecution(String jobName, JobParameters jobParameters) { - // TODO Auto-generated method stub - return null; + JobInstance jobInstance = jobInstanceDao.getJobInstance(jobName, jobParameters); + if (jobInstance == null) { + return null; + } + return jobExecutionDao.getLastJobExecution(jobInstance); + } } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java index 0737aac09..31c51a743 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryIntegrationTests.java @@ -47,13 +47,15 @@ public class SimpleJobRepositoryIntegrationTests { * Create two job executions for same job+parameters tuple. Check both * executions belong to the same job instance and job. */ - @Transactional @Test + @Transactional + @Test public void testCreateAndFind() throws Exception { job.setRestartable(true); JobParametersBuilder builder = new JobParametersBuilder(); - builder.addString("stringKey", "stringValue").addLong("longKey", 1L).addDouble("doubleKey", 1.1).addDate("dateKey", new Date(1L)); + builder.addString("stringKey", "stringValue").addLong("longKey", 1L).addDouble("doubleKey", 1.1).addDate( + "dateKey", new Date(1L)); JobParameters jobParams = builder.toJobParameters(); JobExecution firstExecution = jobRepository.createJobExecution(job.getName(), jobParams); @@ -75,7 +77,8 @@ public class SimpleJobRepositoryIntegrationTests { * Create two job executions for same job+parameters tuple. Check both * executions belong to the same job instance and job. */ - @Transactional @Test + @Transactional + @Test public void testCreateAndFindWithNoStartDate() throws Exception { job.setRestartable(true); @@ -93,7 +96,8 @@ public class SimpleJobRepositoryIntegrationTests { * Save multiple StepExecutions for the same step and check the returned * count and last execution are correct. */ - @Transactional @Test + @Transactional + @Test public void testGetStepExecutionCountAndLastStepExecution() throws Exception { job.setRestartable(true); StepSupport step = new StepSupport("restartedStep"); @@ -130,7 +134,8 @@ public class SimpleJobRepositoryIntegrationTests { /* * Save execution context and retrieve it. */ - @Transactional @Test + @Transactional + @Test public void testSaveExecutionContext() throws Exception { ExecutionContext ctx = new ExecutionContext() { { @@ -150,21 +155,23 @@ public class SimpleJobRepositoryIntegrationTests { StepExecution retrievedStepExec = jobRepository.getLastStepExecution(jobExec.getJobInstance(), step.getName()); assertEquals(stepExec, retrievedStepExec); assertEquals(ctx, retrievedStepExec.getExecutionContext()); - -// JobExecution retrievedJobExec = jobRepository.getLastJobExecution(jobExec.getJobInstance()); -// assertEquals(jobExec, retrievedJobExec); -// assertEquals(ctx, retrievedJobExec.getExecutionContext()); + + // JobExecution retrievedJobExec = + // jobRepository.getLastJobExecution(jobExec.getJobInstance()); + // assertEquals(jobExec, retrievedJobExec); + // assertEquals(ctx, retrievedJobExec.getExecutionContext()); } /* * If JobExecution is already running, exception will be thrown in attempt * to create new execution. */ - @Transactional @Test + @Transactional + @Test public void testOnlyOneJobExecutionAllowedRunning() throws Exception { job.setRestartable(true); jobRepository.createJobExecution(job.getName(), jobParameters); - + try { jobRepository.createJobExecution(job.getName(), jobParameters); fail(); @@ -173,5 +180,17 @@ public class SimpleJobRepositoryIntegrationTests { // expected } } - + + @Transactional + @Test + public void testGetLastJobExecution() throws Exception { + JobExecution jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters); + jobExecution.setStatus(BatchStatus.FAILED); + jobExecution.setEndTime(new Date()); + jobRepository.update(jobExecution); + Thread.sleep(10); + jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters); + assertEquals(jobExecution, jobRepository.getLastJobExecution(job.getName(), jobParameters)); + } + } \ No newline at end of file