diff --git a/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/JobLaunchCondition.java b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/JobLaunchCondition.java new file mode 100644 index 00000000..971ad898 --- /dev/null +++ b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/configuration/JobLaunchCondition.java @@ -0,0 +1,46 @@ +/* + * Copyright 2016-2019 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. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.task.batch.configuration; + +import org.springframework.boot.autoconfigure.condition.AllNestedConditions; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + +/** + * Evaluates if the correct conditions have been met to create a TaskJobLauncher. + * + * @author Glenn Renfro + * @since 2.2.0 + */ +public class JobLaunchCondition extends AllNestedConditions { + + public JobLaunchCondition() { + super(ConfigurationPhase.PARSE_CONFIGURATION); + } + + @ConditionalOnProperty(name = "spring.cloud.task.batch.fail-on-job-failure", + havingValue = "true") + static class FailOnJobFailureCondition { + + } + + @ConditionalOnProperty(prefix = "spring.batch.job", name = "enabled", + havingValue = "true", matchIfMissing = true) + static class SpringBatchJobCondition { + + } + +} 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 fb943736..c0e7b0cc 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 @@ -26,9 +26,9 @@ import org.springframework.batch.core.repository.JobRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Conditional; import org.springframework.context.annotation.Configuration; /** @@ -38,8 +38,7 @@ import org.springframework.context.annotation.Configuration; * @author Glenn Renfro */ @Configuration -@ConditionalOnProperty(name = "spring.cloud.task.batch.fail-on-job-failure", - havingValue = "true") +@Conditional(JobLaunchCondition.class) @EnableConfigurationProperties(TaskBatchProperties.class) @AutoConfigureBefore(BatchAutoConfiguration.class) public class TaskJobLauncherAutoConfiguration { 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 63d9dbfa..d88546f6 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 @@ -32,6 +32,7 @@ import org.springframework.batch.core.configuration.annotation.DefaultBatchConfi import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.explore.JobExplorer; import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.core.launch.support.SimpleJobLauncher; import org.springframework.batch.core.scope.context.ChunkContext; @@ -112,6 +113,19 @@ public class TaskJobLauncherCommandLineRunnerTests { enabledArgs); } + @Test + public void testNoTaskJobLauncher() { + String[] enabledArgs = new String[] { + "--spring.cloud.task.batch.failOnJobFailure=true", + "--spring.cloud.task.batch.failOnJobFailurePollInterval=500", + "--spring.batch.job.enabled=false" }; + this.applicationContext = SpringApplication.run(new Class[] { + TaskJobLauncherCommandLineRunnerTests.JobWithFailureConfiguration.class }, + enabledArgs); + JobExplorer jobExplorer = this.applicationContext.getBean(JobExplorer.class); + assertThat(jobExplorer.getJobNames().size()).isEqualTo(0); + } + @Test public void testTaskJobLauncherPickOneJob() { String[] enabledArgs = new String[] {