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 8fc3e00c2..d8137c922 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 @@ -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); 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 f8ecb0c44..d27aa6ba8 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-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 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. */