From 23d7ed08035fbce233782b65d9961c39451adeca Mon Sep 17 00:00:00 2001 From: Glenn Renfro Date: Tue, 30 Oct 2018 17:49:30 -0400 Subject: [PATCH] Updated so that the TaskJobLauncherCommandLineRunner matches JobLauncherCommandLineRunner in Boot 2.0.7. REMOVE the Spring boot dependencies. They are here only until the 2.0.7.RELEASE is out. resolves #470 Updated versions --- pom.xml | 9 ++- spring-cloud-task-batch/pom.xml | 6 ++ .../TaskJobLauncherAutoConfiguration.java | 17 +++- ...bLauncherCommandLineRunnerFactoryBean.java | 9 ++- .../TaskJobLauncherCommandLineRunner.java | 75 +++++++++++++++++- ...JobLauncherCommandLineRunnerCoreTests.java | 77 +++++++++++++++++-- ...TaskJobLauncherCommandLineRunnerTests.java | 4 + spring-cloud-task-integration-tests/pom.xml | 30 ++++++++ .../batch-events/pom.xml | 8 +- spring-cloud-task-samples/batch-job/pom.xml | 2 +- spring-cloud-task-samples/jpa-sample/pom.xml | 2 +- .../multiple-datasources/pom.xml | 2 +- .../partitioned-batch-job/pom.xml | 2 +- spring-cloud-task-samples/task-events/pom.xml | 4 +- .../taskprocessor/pom.xml | 6 +- spring-cloud-task-samples/tasksink/pom.xml | 4 +- spring-cloud-task-samples/timestamp/pom.xml | 2 +- 17 files changed, 226 insertions(+), 33 deletions(-) diff --git a/pom.xml b/pom.xml index 7e424ff4..1146d79a 100755 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-build - 2.0.0.RELEASE + 2.0.5.BUILD-SNAPSHOT @@ -132,15 +132,16 @@ - 2.0.0.RELEASE + 2.0.2.RELEASE 1.3.2.RELEASE 1.3.5.RELEASE - 2.0.0.RELEASE + 2.0.2.RELEASE 1.3.2.RELEASE 1.3.2.RELEASE - 4.0.1.RELEASE + 4.1.0.RELEASE 1.1 8.0 + 5.3.1 UTF-8 ${project.build.directory}/coverage-reports/jacoco-ut.exec diff --git a/spring-cloud-task-batch/pom.xml b/spring-cloud-task-batch/pom.xml index 2a8d7e86..5d2edf08 100644 --- a/spring-cloud-task-batch/pom.xml +++ b/spring-cloud-task-batch/pom.xml @@ -79,5 +79,11 @@ org.springframework.boot spring-boot-test + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + diff --git a/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherAutoConfiguration.java b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherAutoConfiguration.java index 6350657b..1a1de459 100644 --- a/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherAutoConfiguration.java +++ b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherAutoConfiguration.java @@ -18,11 +18,16 @@ package org.springframework.cloud.task.batch.configuration; import java.util.List; +import javax.sql.DataSource; + import org.springframework.batch.core.Job; import org.springframework.batch.core.configuration.JobRegistry; import org.springframework.batch.core.explore.JobExplorer; import org.springframework.batch.core.launch.JobLauncher; +import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.repository.support.JobRepositoryFactoryBean; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -42,15 +47,23 @@ public class TaskJobLauncherAutoConfiguration { @Autowired private TaskBatchProperties properties; + @Bean + @ConditionalOnMissingBean(JobRepository.class) + public JobRepository jobRepository(DataSource dataSource) throws Exception{ + JobRepositoryFactoryBean factoryBean = new JobRepositoryFactoryBean(); + factoryBean.setDataSource(dataSource); + return factoryBean.getObject(); + } + @Bean public TaskJobLauncherCommandLineRunnerFactoryBean jobLauncherCommandLineRunner(JobLauncher jobLauncher, - JobExplorer jobExplorer, List jobs, JobRegistry jobRegistry) { + JobExplorer jobExplorer, List jobs, JobRegistry jobRegistry, JobRepository jobRepository) { TaskJobLauncherCommandLineRunnerFactoryBean taskJobLauncherCommandLineRunnerFactoryBean = new TaskJobLauncherCommandLineRunnerFactoryBean(jobLauncher, jobExplorer, jobs, this.properties.getJobNames(), - jobRegistry); + jobRegistry, jobRepository); taskJobLauncherCommandLineRunnerFactoryBean.setOrder(this.properties.getCommandLineRunnerOrder()); diff --git a/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherCommandLineRunnerFactoryBean.java b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherCommandLineRunnerFactoryBean.java index f5df4c50..2459a00b 100644 --- a/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherCommandLineRunnerFactoryBean.java +++ b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/TaskJobLauncherCommandLineRunnerFactoryBean.java @@ -22,6 +22,7 @@ import org.springframework.batch.core.Job; import org.springframework.batch.core.configuration.JobRegistry; import org.springframework.batch.core.explore.JobExplorer; import org.springframework.batch.core.launch.JobLauncher; +import org.springframework.batch.core.repository.JobRepository; import org.springframework.beans.factory.FactoryBean; import org.springframework.cloud.task.batch.handler.TaskJobLauncherCommandLineRunner; import org.springframework.util.Assert; @@ -44,17 +45,20 @@ public class TaskJobLauncherCommandLineRunnerFactoryBean implements FactoryBean< private JobRegistry jobRegistry; + private JobRepository jobRepository; + private Integer order = 0; public TaskJobLauncherCommandLineRunnerFactoryBean(JobLauncher jobLauncher, JobExplorer jobExplorer, List jobs, String jobNames, - JobRegistry jobRegistry) { + JobRegistry jobRegistry, JobRepository jobRepository) { this.jobLauncher = jobLauncher; this.jobExplorer = jobExplorer; Assert.notEmpty(jobs, "jobs must not be null nor empty"); this.jobs = jobs; this.jobNames = jobNames; this.jobRegistry = jobRegistry; + this.jobRepository = jobRepository; } public void setOrder(int order) { @@ -64,7 +68,8 @@ public class TaskJobLauncherCommandLineRunnerFactoryBean implements FactoryBean< @Override public TaskJobLauncherCommandLineRunner getObject() throws Exception { TaskJobLauncherCommandLineRunner taskJobLauncherCommandLineRunner = - new TaskJobLauncherCommandLineRunner(this.jobLauncher, this.jobExplorer); + new TaskJobLauncherCommandLineRunner(this.jobLauncher, + this.jobExplorer, this.jobRepository); taskJobLauncherCommandLineRunner.setJobs(this.jobs); if(StringUtils.hasText(this.jobNames)) { taskJobLauncherCommandLineRunner.setJobNames(this.jobNames); diff --git a/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherCommandLineRunner.java b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherCommandLineRunner.java index fb3c54a7..55ab9794 100644 --- a/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherCommandLineRunner.java +++ b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherCommandLineRunner.java @@ -19,17 +19,22 @@ package org.springframework.cloud.task.batch.handler; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.batch.core.BatchStatus; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.Job; import org.springframework.batch.core.JobExecution; import org.springframework.batch.core.JobExecutionException; +import org.springframework.batch.core.JobParameter; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.JobParametersBuilder; +import org.springframework.batch.core.JobParametersIncrementer; import org.springframework.batch.core.JobParametersInvalidException; import org.springframework.batch.core.configuration.JobRegistry; import org.springframework.batch.core.converter.DefaultJobParametersConverter; @@ -40,6 +45,7 @@ import org.springframework.batch.core.launch.JobParametersNotFoundException; import org.springframework.batch.core.launch.NoSuchJobException; import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException; import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException; +import org.springframework.batch.core.repository.JobRepository; import org.springframework.batch.core.repository.JobRestartException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; @@ -80,6 +86,8 @@ public class TaskJobLauncherCommandLineRunner implements CommandLineRunner, Orde private JobExplorer jobExplorer; + private JobRepository jobRepository; + private String jobNames; private Collection jobs = Collections.emptySet(); @@ -88,10 +96,18 @@ public class TaskJobLauncherCommandLineRunner implements CommandLineRunner, Orde private ApplicationEventPublisher publisher; + /** + * Create a new {@link TaskJobLauncherCommandLineRunner}. + * @param jobLauncher to launch jobs + * @param jobExplorer to check the job repository for previous executions + * @param jobRepository to check if a job instance exists with the given parameters + * when running a job + */ public TaskJobLauncherCommandLineRunner(JobLauncher jobLauncher, - JobExplorer jobExplorer) { + JobExplorer jobExplorer, JobRepository jobRepository) { this.jobLauncher = jobLauncher; this.jobExplorer = jobExplorer; + this.jobRepository = jobRepository; } public void setOrder(int order) { @@ -160,9 +176,39 @@ public class TaskJobLauncherCommandLineRunner implements CommandLineRunner, Orde throws JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException, JobParametersInvalidException, JobParametersNotFoundException { - JobParameters nextParameters = new JobParametersBuilder(jobParameters, - this.jobExplorer).getNextJobParameters(job).toJobParameters(); - JobExecution execution = this.jobLauncher.run(job, nextParameters); + String jobName = job.getName(); + JobParameters parameters = jobParameters; + boolean jobInstanceExists = this.jobRepository.isJobInstanceExists(jobName, + parameters); + if (jobInstanceExists) { + JobExecution lastJobExecution = this.jobRepository + .getLastJobExecution(jobName, jobParameters); + if (lastJobExecution != null && isStoppedOrFailed(lastJobExecution) + && job.isRestartable()) { + // Retry a failed or stopped execution with previous parameters + JobParameters previousParameters = lastJobExecution.getJobParameters(); + /* + * remove Non-identifying parameters from the previous execution's + * parameters since there is no way to remove them programmatically. If + * they are required (or need to be modified) on a restart, they need to + * be (re)specified. + */ + JobParameters previousIdentifyingParameters = removeNonIdentifying( + previousParameters); + // merge additional parameters with previous ones (overriding those with + // the same key) + parameters = merge(previousIdentifyingParameters, jobParameters); + } + } + else { + JobParametersIncrementer incrementer = job.getJobParametersIncrementer(); + if (incrementer != null) { + JobParameters nextParameters = new JobParametersBuilder(jobParameters, + this.jobExplorer).getNextJobParameters(job).toJobParameters(); + parameters = merge(nextParameters, jobParameters); + } + } + JobExecution execution = this.jobLauncher.run(job, parameters); if (this.publisher != null) { this.publisher.publishEvent(new JobExecutionEvent(execution)); } @@ -189,4 +235,25 @@ public class TaskJobLauncherCommandLineRunner implements CommandLineRunner, Orde execute(job, jobParameters); } } + + private JobParameters removeNonIdentifying(JobParameters parameters) { + Map parameterMap = parameters.getParameters(); + HashMap copy = new HashMap<>(parameterMap); + for (Map.Entry parameter : copy.entrySet()) { + if (!parameter.getValue().isIdentifying()) { + parameterMap.remove(parameter.getKey()); + } + } + return new JobParameters(parameterMap); + } + private boolean isStoppedOrFailed(JobExecution execution) { + BatchStatus status = execution.getStatus(); + return (status == BatchStatus.STOPPED || status == BatchStatus.FAILED); + } + private JobParameters merge(JobParameters parameters, JobParameters additionals) { + Map merged = new HashMap<>(); + merged.putAll(parameters.getParameters()); + merged.putAll(additionals.getParameters()); + return new JobParameters(merged); + } } diff --git a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherCommandLineRunnerCoreTests.java b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherCommandLineRunnerCoreTests.java index 38cd20a8..6abb060c 100644 --- a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherCommandLineRunnerCoreTests.java +++ b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherCommandLineRunnerCoreTests.java @@ -16,11 +16,15 @@ package org.springframework.cloud.task.batch.handler; +import org.assertj.core.api.AssertionsForClassTypes; import org.junit.Before; import org.junit.Test; +import org.junit.jupiter.api.function.Executable; import org.junit.runner.RunWith; import org.springframework.batch.core.Job; +import org.springframework.batch.core.JobExecution; +import org.springframework.batch.core.JobInstance; import org.springframework.batch.core.JobParameters; import org.springframework.batch.core.JobParametersBuilder; import org.springframework.batch.core.Step; @@ -34,6 +38,7 @@ import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.core.launch.support.RunIdIncrementer; import org.springframework.batch.core.launch.support.SimpleJobLauncher; import org.springframework.batch.core.repository.JobRepository; +import org.springframework.batch.core.repository.JobRestartException; import org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean; import org.springframework.batch.core.step.tasklet.Tasklet; import org.springframework.batch.support.transaction.ResourcelessTransactionManager; @@ -47,6 +52,7 @@ import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.PlatformTransactionManager; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Glenn Renfro @@ -84,7 +90,8 @@ public class TaskJobLauncherCommandLineRunnerCoreTests { Tasklet tasklet = (contribution, chunkContext) -> null; this.step = this.steps.get("step").tasklet(tasklet).build(); this.job = this.jobs.get("job").start(this.step).build(); - this.runner = new TaskJobLauncherCommandLineRunner(this.jobLauncher, this.jobExplorer); + this.runner = new TaskJobLauncherCommandLineRunner(this.jobLauncher, + this.jobExplorer, this.jobRepository); } @@ -115,7 +122,7 @@ public class TaskJobLauncherCommandLineRunnerCoreTests { .start(this.steps.get("step").tasklet(throwingTasklet()).build()) .incrementer(new RunIdIncrementer()).build(); runFailedJob(new JobParameters()); - runFailedJob(new JobParameters()); + runFailedJob(new JobParametersBuilder().addLong("run.id", 1L).toJobParameters()); assertThat(this.jobExplorer.getJobInstances("job", 0, 100)).hasSize(1); } @@ -130,6 +137,31 @@ public class TaskJobLauncherCommandLineRunnerCoreTests { // A failed job that is not restartable does not re-use the job params of // the last execution, but creates a new job instance when running it again. assertThat(this.jobExplorer.getJobInstances("job", 0, 100)).hasSize(2); + // try to re-run a failed execution + Executable executable = () -> { + this.runner.execute(this.job, + new JobParametersBuilder().addLong("run.id", 1L).toJobParameters()); + }; + Throwable exception = assertThrows(JobRestartException.class, executable); + AssertionsForClassTypes.assertThat(exception.getMessage()) + .isEqualTo("JobInstance already exists and is not restartable"); + } + + @DirtiesContext + @Test + public void runDifferentInstances() throws Exception { + this.job = this.jobs.get("job") + .start(this.steps.get("step").tasklet(throwingTasklet()).build()).build(); + // start a job instance + JobParameters jobParameters = new JobParametersBuilder().addString("name", "foo") + .toJobParameters(); + runFailedJob(jobParameters); + assertThat(this.jobExplorer.getJobInstances("job", 0, 100)).hasSize(1); + // start a different job instance + JobParameters otherJobParameters = new JobParametersBuilder() + .addString("name", "bar").toJobParameters(); + runFailedJob(otherJobParameters); + assertThat(this.jobExplorer.getJobInstances("job", 0, 100)).hasSize(2); } @DirtiesContext @@ -140,9 +172,44 @@ public class TaskJobLauncherCommandLineRunnerCoreTests { .incrementer(new RunIdIncrementer()).build(); JobParameters jobParameters = new JobParametersBuilder().addLong("id", 1L, false) .addLong("foo", 2L, false).toJobParameters(); - runFailedJob(new JobParameters()); - runFailedJob(new JobParameters()); + runFailedJob(jobParameters); assertThat(this.jobExplorer.getJobInstances("job", 0, 100)).hasSize(1); + runFailedJob(new JobParametersBuilder(jobParameters) + .addLong("run.id", 1L).toJobParameters()); + assertThat(this.jobExplorer.getJobInstances("job", 0, 100)).hasSize(1); + } + + @DirtiesContext + @Test + public void retryFailedExecutionWithDifferentNonIdentifyingParametersFromPreviousExecution() + throws Exception { + this.job = this.jobs.get("job") + .start(this.steps.get("step").tasklet(throwingTasklet()).build()) + .incrementer(new RunIdIncrementer()).build(); + JobParameters jobParameters = new JobParametersBuilder().addLong("id", 1L, false) + .addLong("foo", 2L, false).toJobParameters(); + runFailedJob(jobParameters); + assertThat(this.jobExplorer.getJobInstances("job", 0, 100)).hasSize(1); + // try to re-run a failed execution with non identifying parameters + runFailedJob( new JobParametersBuilder().addLong("run.id", 1L) + .addLong("id", 2L, false).addLong("foo", 3L, false).toJobParameters()); + assertThat(this.jobExplorer.getJobInstances("job", 0, 100)).hasSize(1); + JobInstance jobInstance = this.jobExplorer.getJobInstance(0L); + assertThat(this.jobExplorer.getJobExecutions(jobInstance)).hasSize(2); + // first execution + JobExecution firstJobExecution = this.jobExplorer.getJobExecution(0L); + JobParameters parameters = firstJobExecution.getJobParameters(); + assertThat(parameters.getLong("run.id")).isEqualTo(1L); + assertThat(parameters.getLong("id")).isEqualTo(1L); + assertThat(parameters.getLong("foo")).isEqualTo(2L); + // second execution + JobExecution secondJobExecution = this.jobExplorer.getJobExecution(1L); + parameters = secondJobExecution.getJobParameters(); + // identifying parameters should be the same as previous execution + assertThat(parameters.getLong("run.id")).isEqualTo(1L); + // non-identifying parameters should be the newly specified ones + assertThat(parameters.getLong("id")).isEqualTo(2L); + assertThat(parameters.getLong("foo")).isEqualTo(3L); } private Tasklet throwingTasklet() { @@ -154,7 +221,7 @@ public class TaskJobLauncherCommandLineRunnerCoreTests { private void runFailedJob(JobParameters jobParameters) throws Exception { boolean isExceptionThrown = false; try { - this.runner.execute(this.job, new JobParameters()); + this.runner.execute(this.job, jobParameters); } catch (TaskException taskException) { isExceptionThrown = true; diff --git a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherCommandLineRunnerTests.java b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherCommandLineRunnerTests.java index bedfe50a..9660acf9 100644 --- a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherCommandLineRunnerTests.java +++ b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/handler/TaskJobLauncherCommandLineRunnerTests.java @@ -46,6 +46,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.test.annotation.DirtiesContext; import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; @@ -63,6 +64,7 @@ public class TaskJobLauncherCommandLineRunnerTests { } } + @DirtiesContext @Test public void testTaskJobLauncherCLRSuccessFail() { String[] enabledArgs = new String[] { "--spring.cloud.task.batch.failOnJobFailure=true" }; @@ -82,6 +84,7 @@ public class TaskJobLauncherCommandLineRunnerTests { assertThat(isExceptionThrown).isTrue(); } + @DirtiesContext @Test public void testTaskJobLauncherPickOneJob() { String[] enabledArgs = new String[] { @@ -104,6 +107,7 @@ public class TaskJobLauncherCommandLineRunnerTests { validateContext(); } + @DirtiesContext @Test public void testCommandLineRunnerSetToFalse() { String[] enabledArgs = new String[] { }; diff --git a/spring-cloud-task-integration-tests/pom.xml b/spring-cloud-task-integration-tests/pom.xml index 24202898..8162828a 100644 --- a/spring-cloud-task-integration-tests/pom.xml +++ b/spring-cloud-task-integration-tests/pom.xml @@ -94,6 +94,36 @@ spring-integration-jdbc test + + org.springframework.boot + spring-boot-test + ${spring-boot.version} + + + org.springframework.boot + spring-boot + ${spring-boot.version} + + + org.springframework.boot + spring-boot-autoconfigure + ${spring-boot.version} + + + org.springframework.boot + spring-boot-starter + ${spring-boot.version} + + + org.springframework.boot + spring-boot-starter-logging + ${spring-boot.version} + + + org.springframework.boot + spring-boot-starter-validation + ${spring-boot.version} + diff --git a/spring-cloud-task-samples/batch-events/pom.xml b/spring-cloud-task-samples/batch-events/pom.xml index 53e77e63..569acc1c 100644 --- a/spring-cloud-task-samples/batch-events/pom.xml +++ b/spring-cloud-task-samples/batch-events/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.1.RELEASE + 2.0.8.RELEASE @@ -47,19 +47,19 @@ org.springframework.cloud spring-cloud-starter-stream-rabbit - 2.0.0.RELEASE + 2.0.2.RELEASE compile org.springframework.cloud spring-cloud-stream-binder-rabbit-test-support - 2.0.0.RELEASE + 2.0.2.RELEASE test org.springframework.cloud spring-cloud-stream-test-support-internal - 2.0.0.RELEASE + 2.0.2.RELEASE test diff --git a/spring-cloud-task-samples/batch-job/pom.xml b/spring-cloud-task-samples/batch-job/pom.xml index 39cc65cc..df3bd26f 100644 --- a/spring-cloud-task-samples/batch-job/pom.xml +++ b/spring-cloud-task-samples/batch-job/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.1.RELEASE + 2.0.8.RELEASE diff --git a/spring-cloud-task-samples/jpa-sample/pom.xml b/spring-cloud-task-samples/jpa-sample/pom.xml index 54aa371d..f786c787 100644 --- a/spring-cloud-task-samples/jpa-sample/pom.xml +++ b/spring-cloud-task-samples/jpa-sample/pom.xml @@ -27,7 +27,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.1.RELEASE + 2.0.8.RELEASE diff --git a/spring-cloud-task-samples/multiple-datasources/pom.xml b/spring-cloud-task-samples/multiple-datasources/pom.xml index e5ab27f2..2c7283f7 100644 --- a/spring-cloud-task-samples/multiple-datasources/pom.xml +++ b/spring-cloud-task-samples/multiple-datasources/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.1.RELEASE + 2.0.8.RELEASE diff --git a/spring-cloud-task-samples/partitioned-batch-job/pom.xml b/spring-cloud-task-samples/partitioned-batch-job/pom.xml index 317625d9..239bc87d 100644 --- a/spring-cloud-task-samples/partitioned-batch-job/pom.xml +++ b/spring-cloud-task-samples/partitioned-batch-job/pom.xml @@ -12,7 +12,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.1.RELEASE + 2.0.8.RELEASE diff --git a/spring-cloud-task-samples/task-events/pom.xml b/spring-cloud-task-samples/task-events/pom.xml index 5529cbf3..17038e34 100644 --- a/spring-cloud-task-samples/task-events/pom.xml +++ b/spring-cloud-task-samples/task-events/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.1.RELEASE + 2.0.8.RELEASE @@ -43,7 +43,7 @@ org.springframework.cloud spring-cloud-starter-stream-rabbit - 2.0.0.RELEASE + 2.0.2.RELEASE compile diff --git a/spring-cloud-task-samples/taskprocessor/pom.xml b/spring-cloud-task-samples/taskprocessor/pom.xml index df29d82a..f6d7ad36 100644 --- a/spring-cloud-task-samples/taskprocessor/pom.xml +++ b/spring-cloud-task-samples/taskprocessor/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.1.RELEASE + 2.0.8.RELEASE @@ -42,7 +42,7 @@ org.springframework.cloud spring-cloud-starter-stream-rabbit - 2.0.0.RELEASE + 2.0.2.RELEASE compile @@ -52,7 +52,7 @@ org.springframework.cloud spring-cloud-stream-test-support - 2.0.0.RELEASE + 2.0.2.RELEASE test diff --git a/spring-cloud-task-samples/tasksink/pom.xml b/spring-cloud-task-samples/tasksink/pom.xml index 0f966b54..6a9cc53b 100644 --- a/spring-cloud-task-samples/tasksink/pom.xml +++ b/spring-cloud-task-samples/tasksink/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.1.RELEASE + 2.0.8.RELEASE @@ -48,7 +48,7 @@ org.springframework.cloud spring-cloud-stream-test-support - 2.0.0.RELEASE + 2.0.2.RELEASE test diff --git a/spring-cloud-task-samples/timestamp/pom.xml b/spring-cloud-task-samples/timestamp/pom.xml index adf64e93..9b936218 100644 --- a/spring-cloud-task-samples/timestamp/pom.xml +++ b/spring-cloud-task-samples/timestamp/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.0.1.RELEASE + 2.0.8.RELEASE