diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/JobParametersBuilder.java b/spring-batch-core/src/main/java/org/springframework/batch/core/JobParametersBuilder.java index a7a5ba787..f56a755ad 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/JobParametersBuilder.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/JobParametersBuilder.java @@ -222,6 +222,19 @@ public class JobParametersBuilder { return this; } + /** + * Copy job parameters into the current state. + * @param jobParameters parameters to copy in + * @return a reference to this object. + */ + public JobParametersBuilder addJobParameters(JobParameters jobParameters) { + Assert.notNull(jobParameters, "jobParameters must not be null"); + + this.parameterMap.putAll(jobParameters.getParameters()); + + return this; + } + /** * Initializes the {@link JobParameters} based on the state of the {@link Job}. This * should be called after all parameters have been entered into the builder. @@ -267,7 +280,10 @@ public class JobParametersBuilder { nextParameters = incrementer.getNext(previousExecution.getJobParameters()); } } - this.parameterMap = merge(nextParameters, this.parameterMap); + + this.parameterMap = addJobParameters(nextParameters) + .toJobParameters() + .getParameters(); return this; } @@ -280,14 +296,6 @@ public class JobParametersBuilder { } } - private LinkedHashMap merge(JobParameters parameters, - Map additionals) { - Map merged = new HashMap<>(); - merged.putAll(parameters.getParameters()); - merged.putAll(additionals); - return new LinkedHashMap<>(merged); - } - private boolean isStoppedOrFailed(JobExecution execution) { BatchStatus status = execution.getStatus(); return (status == BatchStatus.STOPPED || status == BatchStatus.FAILED); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersBuilderTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersBuilderTests.java index 156d08da7..c8e9dac17 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersBuilderTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/JobParametersBuilderTests.java @@ -64,6 +64,28 @@ public class JobParametersBuilderTests { this.parametersBuilder = new JobParametersBuilder(this.jobExplorer); } + @Test + public void testAddingExistingJobParameters() { + JobParameters params1 = new JobParametersBuilder() + .addString("foo", "bar") + .addString("bar", "baz") + .toJobParameters(); + + JobParameters params2 = new JobParametersBuilder() + .addString("foo", "baz") + .toJobParameters(); + + JobParameters finalParams = new JobParametersBuilder() + .addString("baz", "quix") + .addJobParameters(params1) + .addJobParameters(params2) + .toJobParameters(); + + assertEquals(finalParams.getString("foo"), "baz"); + assertEquals(finalParams.getString("bar"), "baz"); + assertEquals(finalParams.getString("baz"), "quix"); + } + @Test public void testNonIdentifyingParameters() { this.parametersBuilder.addDate("SCHEDULE_DATE", date, false);