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
9874a6502c
commit
539ec71ed7
@@ -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.
|
||||
@@ -61,6 +61,7 @@ import org.springframework.util.Assert;
|
||||
* @author Michael Minella
|
||||
* @author Mahmoud Ben Hassine
|
||||
* @author Dimitrios Liapis
|
||||
* @author Jinwoo Bae
|
||||
*/
|
||||
public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements JobExecutionDao, InitializingBean {
|
||||
|
||||
@@ -403,8 +404,6 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
|
||||
|
||||
private JobInstance jobInstance;
|
||||
|
||||
private JobParameters jobParameters;
|
||||
|
||||
public JobExecutionRowMapper() {
|
||||
}
|
||||
|
||||
@@ -417,9 +416,7 @@ public class JdbcJobExecutionDao extends AbstractJdbcBatchMetadataDao implements
|
||||
Long id = rs.getLong(1);
|
||||
String jobConfigurationLocation = rs.getString(10);
|
||||
JobExecution jobExecution;
|
||||
if (jobParameters == null) {
|
||||
jobParameters = getJobParameters(id);
|
||||
}
|
||||
JobParameters jobParameters = getJobParameters(id);
|
||||
|
||||
if (jobInstance == null) {
|
||||
jobExecution = new JobExecution(id, jobParameters, jobConfigurationLocation);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2006-2019 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.
|
||||
@@ -45,6 +45,8 @@ import org.springframework.batch.core.JobParametersBuilder;
|
||||
import org.springframework.batch.core.Step;
|
||||
import org.springframework.batch.core.StepExecution;
|
||||
import org.springframework.batch.core.UnexpectedJobExecutionException;
|
||||
import org.springframework.batch.core.explore.JobExplorer;
|
||||
import org.springframework.batch.core.explore.support.SimpleJobExplorer;
|
||||
import org.springframework.batch.core.listener.JobExecutionListenerSupport;
|
||||
import org.springframework.batch.core.repository.JobRepository;
|
||||
import org.springframework.batch.core.repository.dao.ExecutionContextDao;
|
||||
@@ -66,11 +68,14 @@ import org.springframework.batch.item.ExecutionContext;
|
||||
* @author Lucas Ward
|
||||
* @author Will Schipp
|
||||
* @author Mahmoud Ben Hassine
|
||||
* @author Jinwoo Bae
|
||||
*/
|
||||
public class SimpleJobTests {
|
||||
|
||||
private JobRepository jobRepository;
|
||||
|
||||
private JobExplorer jobExplorer;
|
||||
|
||||
private JobInstanceDao jobInstanceDao;
|
||||
|
||||
private JobExecutionDao jobExecutionDao;
|
||||
@@ -105,9 +110,11 @@ public class SimpleJobTests {
|
||||
stepExecutionDao = new MapStepExecutionDao();
|
||||
ecDao = new MapExecutionContextDao();
|
||||
jobRepository = new SimpleJobRepository(jobInstanceDao, jobExecutionDao, stepExecutionDao, ecDao);
|
||||
jobExplorer = new SimpleJobExplorer(jobInstanceDao, jobExecutionDao, stepExecutionDao, ecDao);
|
||||
job = new SimpleJob();
|
||||
job.setJobRepository(jobRepository);
|
||||
|
||||
|
||||
step1 = new StubStep("TestStep1", jobRepository);
|
||||
step1.setCallback(new Runnable() {
|
||||
@Override
|
||||
@@ -524,6 +531,43 @@ public class SimpleJobTests {
|
||||
assertNull(step);
|
||||
}
|
||||
|
||||
@Test
|
||||
public 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