Fix retrieval of job parameters in SimpleJobExplorer#getJobExecutions
Before this commit, SimpleJobExplorer#getJobExecutions returned job executions with wrong job parameters, ie a job execution could have the parameter of another execution. This commit fixes the implementation so that each returned job execution has its own parameters. Resolves #4246
This commit is contained in:
committed by
Mahmoud Ben Hassine
parent
4a4c822274
commit
e329b61d18
@@ -71,6 +71,7 @@ import org.springframework.util.Assert;
|
||||
* @author Mahmoud Ben Hassine
|
||||
* @author Dimitrios Liapis
|
||||
* @author Philippe Marschall
|
||||
* @author Jinwoo Bae
|
||||
*/
|
||||
public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements JobExecutionDao, InitializingBean {
|
||||
|
||||
@@ -492,8 +493,6 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
|
||||
|
||||
private JobInstance jobInstance;
|
||||
|
||||
private JobParameters jobParameters;
|
||||
|
||||
public JobExecutionRowMapper() {
|
||||
}
|
||||
|
||||
@@ -505,9 +504,7 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
|
||||
public JobExecution mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
Long id = rs.getLong(1);
|
||||
JobExecution jobExecution;
|
||||
if (jobParameters == null) {
|
||||
jobParameters = getJobParameters(id);
|
||||
}
|
||||
JobParameters jobParameters = getJobParameters(id);
|
||||
|
||||
if (jobInstance == null) {
|
||||
jobExecution = new JobExecution(id, jobParameters);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2006-2022 the original author or authors.
|
||||
* Copyright 2006-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -40,6 +40,7 @@ import org.springframework.batch.core.JobExecutionListener;
|
||||
import org.springframework.batch.core.JobInstance;
|
||||
import org.springframework.batch.core.JobInterruptedException;
|
||||
import org.springframework.batch.core.JobParameters;
|
||||
import org.springframework.batch.core.JobParametersBuilder;
|
||||
import org.springframework.batch.core.Step;
|
||||
import org.springframework.batch.core.StepExecution;
|
||||
import org.springframework.batch.core.UnexpectedJobExecutionException;
|
||||
@@ -68,6 +69,7 @@ import static org.mockito.Mockito.mock;
|
||||
* @author Lucas Ward
|
||||
* @author Will Schipp
|
||||
* @author Mahmoud Ben Hassine
|
||||
* @author Jinwoo Bae
|
||||
*/
|
||||
class SimpleJobTests {
|
||||
|
||||
@@ -483,6 +485,43 @@ class SimpleJobTests {
|
||||
assertNull(step);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetMultipleJobParameters() throws Exception {
|
||||
StubStep failStep = new StubStep("failStep", jobRepository);
|
||||
|
||||
failStep.setCallback(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
throw new RuntimeException("An error occurred.");
|
||||
}
|
||||
});
|
||||
|
||||
job.setName("parametersTestJob");
|
||||
job.setSteps(Arrays.asList(new Step[] { failStep }));
|
||||
|
||||
JobParameters firstJobParameters = new JobParametersBuilder().addString("JobExecutionParameter", "first", false)
|
||||
.toJobParameters();
|
||||
JobExecution jobexecution = jobRepository.createJobExecution(job.getName(), firstJobParameters);
|
||||
job.execute(jobexecution);
|
||||
|
||||
List<JobExecution> jobExecutionList = jobExplorer.getJobExecutions(jobexecution.getJobInstance());
|
||||
|
||||
assertEquals(jobExecutionList.size(), 1);
|
||||
assertEquals(jobExecutionList.get(0).getJobParameters().getString("JobExecutionParameter"), "first");
|
||||
|
||||
JobParameters secondJobParameters = new JobParametersBuilder()
|
||||
.addString("JobExecutionParameter", "second", false).toJobParameters();
|
||||
jobexecution = jobRepository.createJobExecution(job.getName(), secondJobParameters);
|
||||
job.execute(jobexecution);
|
||||
|
||||
jobExecutionList = jobExplorer.getJobExecutions(jobexecution.getJobInstance());
|
||||
|
||||
assertEquals(jobExecutionList.size(), 2);
|
||||
assertEquals(jobExecutionList.get(0).getJobParameters().getString("JobExecutionParameter"), "second");
|
||||
assertEquals(jobExecutionList.get(1).getJobParameters().getString("JobExecutionParameter"), "first");
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Check JobRepository to ensure status is being saved.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user