diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDao.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDao.java index 0199f0e3f..1e60a023c 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDao.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/dao/JdbcJobExecutionDao.java @@ -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); diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/job/SimpleJobTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/job/SimpleJobTests.java index b32fdc1f8..45bf26ab6 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/job/SimpleJobTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/job/SimpleJobTests.java @@ -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 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. */