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 8d18a3db..0c4a8478 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 @@ -165,6 +165,7 @@ public class TaskJobLauncherCommandLineRunnerTests { @EnableBatchProcessing @TaskBatchTest @Import(EmbeddedDataSourceConfiguration.class) + @EnableTask public static class JobConfiguration { @Autowired @@ -196,6 +197,7 @@ public class TaskJobLauncherCommandLineRunnerTests { SingleTaskConfiguration.class, SimpleTaskAutoConfiguration.class }) @Import(EmbeddedDataSourceConfiguration.class) + @EnableTask public static class JobWithFailureConfiguration { @Autowired diff --git a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/PrefixTests.java b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/PrefixTests.java index 2716b80a..a4bd7daf 100644 --- a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/PrefixTests.java +++ b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/PrefixTests.java @@ -30,6 +30,7 @@ import org.springframework.batch.repeat.RepeatStatus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.cloud.task.batch.configuration.TaskBatchTest; +import org.springframework.cloud.task.configuration.EnableTask; import org.springframework.cloud.task.repository.TaskExplorer; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; @@ -68,6 +69,7 @@ public class PrefixTests { @Configuration @EnableBatchProcessing @TaskBatchTest + @EnableTask public static class JobConfiguration { @Autowired diff --git a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/TaskBatchExecutionListenerTests.java b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/TaskBatchExecutionListenerTests.java index 743d3e8c..1bebcf9a 100644 --- a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/TaskBatchExecutionListenerTests.java +++ b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/listener/TaskBatchExecutionListenerTests.java @@ -46,6 +46,7 @@ import org.springframework.cloud.task.batch.configuration.TaskBatchAutoConfigura import org.springframework.cloud.task.batch.configuration.TaskBatchExecutionListenerBeanPostProcessor; import org.springframework.cloud.task.batch.configuration.TaskBatchTest; import org.springframework.cloud.task.configuration.DefaultTaskConfigurer; +import org.springframework.cloud.task.configuration.EnableTask; import org.springframework.cloud.task.configuration.SimpleTaskAutoConfiguration; import org.springframework.cloud.task.configuration.SingleTaskConfiguration; import org.springframework.cloud.task.configuration.TaskConfigurer; @@ -249,12 +250,14 @@ public class TaskBatchExecutionListenerTests { @EnableBatchProcessing @TaskBatchTest @Import(EmbeddedDataSourceConfiguration.class) + @EnableTask public static class NoJobConfiguration { } @EnableBatchProcessing @TaskBatchTest + @EnableTask @Import(EmbeddedDataSourceConfiguration.class) public static class JobConfiguration { @@ -280,6 +283,7 @@ public class TaskBatchExecutionListenerTests { @EnableBatchProcessing @TaskBatchTest + @EnableTask @Import(EmbeddedDataSourceConfiguration.class) public static class JobFactoryBeanConfiguration { @@ -320,6 +324,7 @@ public class TaskBatchExecutionListenerTests { @EnableBatchProcessing @TaskBatchTest + @EnableTask @Import(EmbeddedDataSourceConfiguration.class) public static class JobConfigurationMultipleDataSources { @@ -373,6 +378,7 @@ public class TaskBatchExecutionListenerTests { @EnableBatchProcessing @TaskBatchTest + @EnableTask @Import(EmbeddedDataSourceConfiguration.class) public static class MultipleJobConfiguration { diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/EnableTask.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/EnableTask.java index d13d5fdb..11e43db6 100644 --- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/EnableTask.java +++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/EnableTask.java @@ -24,10 +24,12 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.cloud.task.repository.TaskRepository; +import org.springframework.context.annotation.Import; /** *

- * Enable Spring Task features. + * Enables the {@link org.springframework.cloud.task.listener.TaskLifecycleListener} + * so that the features of Spring Cloud Task will be applied. * *

  * @Configuration
@@ -43,23 +45,15 @@ import org.springframework.cloud.task.repository.TaskRepository;
  *
  * Note that only one of your configuration classes needs to have the @EnableTask
  * annotation. Once you have an @EnableTask class in your configuration
- * you will have an instance of {@link TaskConfigurer}.  If one is not specified then the
- * {@link DefaultTaskConfigurer} will be used.
- * You will also be able to @Autowired some useful stuff into your context:
- *
- * 
+ * the task will have the Spring Cloud Task features available.
  *
  * @author Glenn Renfro
  *
- * @deprecated The EnableTask annotation is no longer be required to initialize
- * Spring Cloud Task.  This will be handled by AutoConfiguration provided by Spring Cloud Task.
  */
-@Deprecated
 @Target(ElementType.TYPE)
 @Retention(RetentionPolicy.RUNTIME)
 @Documented
 @Inherited
+@Import(TaskLifecycleConfiguration.class)
 public @interface EnableTask {
 }
diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/SimpleTaskAutoConfiguration.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/SimpleTaskAutoConfiguration.java
index 736133f8..fdf4c945 100644
--- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/SimpleTaskAutoConfiguration.java
+++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/SimpleTaskAutoConfiguration.java
@@ -18,6 +18,7 @@ package org.springframework.cloud.task.configuration;
 
 import java.util.Arrays;
 import java.util.Collection;
+
 import javax.annotation.PostConstruct;
 import javax.sql.DataSource;
 
@@ -30,8 +31,6 @@ import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.cloud.task.listener.TaskLifecycleListener;
-import org.springframework.cloud.task.listener.TaskListenerExecutorObjectFactory;
 import org.springframework.cloud.task.repository.TaskExplorer;
 import org.springframework.cloud.task.repository.TaskNameResolver;
 import org.springframework.cloud.task.repository.TaskRepository;
@@ -76,8 +75,6 @@ public class SimpleTaskAutoConfiguration {
 
 	private TaskRepository taskRepository;
 
-	private TaskLifecycleListener taskLifecycleListener;
-
 	private PlatformTransactionManager platformTransactionManager;
 
 	private TaskExplorer taskExplorer;
@@ -87,11 +84,6 @@ public class SimpleTaskAutoConfiguration {
 		return this.taskRepository;
 	}
 
-	@Bean
-	public TaskLifecycleListener taskLifecycleListener() {
-		return this.taskLifecycleListener;
-	}
-
 	@Bean
 	@ConditionalOnMissingBean
 	public PlatformTransactionManager transactionManager() {
@@ -136,10 +128,6 @@ public class SimpleTaskAutoConfiguration {
 		this.taskRepository = taskConfigurer.getTaskRepository();
 		this.platformTransactionManager = taskConfigurer.getTransactionManager();
 		this.taskExplorer = taskConfigurer.getTaskExplorer();
-
-		this.taskLifecycleListener = new TaskLifecycleListener(this.taskRepository, taskNameResolver(),
-				this.applicationArguments, taskExplorer, taskProperties, new TaskListenerExecutorObjectFactory(context));
-
 		initialized = true;
 	}
 
diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/SingleTaskConfiguration.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/SingleTaskConfiguration.java
index 9270a822..f4213427 100644
--- a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/SingleTaskConfiguration.java
+++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/SingleTaskConfiguration.java
@@ -18,7 +18,7 @@ package org.springframework.cloud.task.configuration;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.cloud.task.repository.support.SimpleTaskNameResolver;
+import org.springframework.cloud.task.repository.TaskNameResolver;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -41,9 +41,6 @@ public class SingleTaskConfiguration {
 	@Autowired
 	private TaskProperties taskProperties;
 
-	@Autowired
-	private SimpleTaskNameResolver taskNameResolver;
-
 	@Autowired
 	private ApplicationEventPublisher applicationEventPublisher;
 
@@ -52,14 +49,14 @@ public class SingleTaskConfiguration {
 
 
 	@Bean
-	public SingleInstanceTaskListener taskListener() {
+	public SingleInstanceTaskListener taskListener(TaskNameResolver resolver) {
 		if (taskConfigurer.getTaskDataSource() == null) {
 			return new SingleInstanceTaskListener(new PassThruLockRegistry(),
-					this.taskNameResolver, this.taskProperties, this.applicationEventPublisher);
+					resolver, this.taskProperties, this.applicationEventPublisher);
 		}
 
 		return new SingleInstanceTaskListener(taskConfigurer.getTaskDataSource(),
-				this.taskNameResolver,
+				resolver,
 				this.taskProperties,
 				this.applicationEventPublisher);
 	}
diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskLifecycleConfiguration.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskLifecycleConfiguration.java
new file mode 100644
index 00000000..dbeb7a5d
--- /dev/null
+++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/TaskLifecycleConfiguration.java
@@ -0,0 +1,88 @@
+/*
+ *  Copyright 2018 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
+ *
+ *          http://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.configuration;
+
+import javax.annotation.PostConstruct;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.cloud.task.listener.TaskLifecycleListener;
+import org.springframework.cloud.task.listener.TaskListenerExecutorObjectFactory;
+import org.springframework.cloud.task.repository.TaskExplorer;
+import org.springframework.cloud.task.repository.TaskNameResolver;
+import org.springframework.cloud.task.repository.TaskRepository;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * Configuration for a {@link TaskLifecycleListener}.
+ *
+ * @author Glenn Renfro
+ * @since 2.1
+ */
+@Configuration
+public class TaskLifecycleConfiguration {
+
+	protected static final Log logger = LogFactory.getLog(TaskLifecycleConfiguration.class);
+
+	@Autowired
+	private TaskProperties taskProperties;
+
+	@Autowired
+	private ConfigurableApplicationContext context;
+
+	@Autowired(required = false)
+	private ApplicationArguments applicationArguments;
+
+	@Autowired
+	private TaskRepository taskRepository;
+
+	@Autowired
+	private TaskExplorer taskExplorer;
+
+	@Autowired
+	private TaskNameResolver taskNameResolver;
+
+	private TaskLifecycleListener taskLifecycleListener;
+
+	private boolean initialized = false;
+
+	@Bean
+	public TaskLifecycleListener taskLifecycleListener() {
+		return this.taskLifecycleListener;
+	}
+
+	/**
+	 * Initializes the {@link TaskLifecycleListener} for the task app.
+	 */
+	@PostConstruct
+	protected void initialize() {
+		if (this.initialized) {
+			return;
+		}
+
+		this.taskLifecycleListener = new TaskLifecycleListener(this.taskRepository, this.taskNameResolver,
+				this.applicationArguments, this.taskExplorer, this.taskProperties, new TaskListenerExecutorObjectFactory(context));
+
+		this.initialized = true;
+	}
+
+}
diff --git a/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/SimpleTaskAutoConfigurationTests.java b/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/SimpleTaskAutoConfigurationTests.java
index af597312..ea01e0f7 100644
--- a/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/SimpleTaskAutoConfigurationTests.java
+++ b/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/SimpleTaskAutoConfigurationTests.java
@@ -35,6 +35,7 @@ import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoCon
 import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfiguration;
 import org.springframework.boot.test.context.runner.ApplicationContextRunner;
 import org.springframework.cloud.task.configuration.DefaultTaskConfigurer;
+import org.springframework.cloud.task.configuration.EnableTask;
 import org.springframework.cloud.task.configuration.SimpleTaskAutoConfiguration;
 import org.springframework.cloud.task.configuration.SingleTaskConfiguration;
 import org.springframework.cloud.task.configuration.TaskConfigurer;
@@ -107,7 +108,8 @@ public class SimpleTaskAutoConfigurationTests {
 				.withConfiguration(AutoConfigurations.of(EmbeddedDataSourceConfiguration.class,
 						PropertyPlaceholderAutoConfiguration.class,
 						SimpleTaskAutoConfiguration.class,
-						SingleTaskConfiguration.class));
+						SingleTaskConfiguration.class))
+				.withUserConfiguration(TaskLifecycleListenerConfiguration.class);
 		applicationContextRunner.run((context) -> {
 			TaskExplorer taskExplorer = context.getBean(TaskExplorer.class);
 			assertThat(taskExplorer.getTaskExecutionCount()).isEqualTo(1l);
@@ -121,6 +123,7 @@ public class SimpleTaskAutoConfigurationTests {
 						PropertyPlaceholderAutoConfiguration.class,
 						SimpleTaskAutoConfiguration.class,
 						SingleTaskConfiguration.class))
+				.withUserConfiguration(TaskLifecycleListenerConfiguration.class)
 				.withPropertyValues("spring.cloud.task.tablePrefix=foobarless");
 
 		verifyExceptionThrownDefaultExecutable(ApplicationContextException.class, "Failed to start " +
@@ -248,4 +251,10 @@ public class SimpleTaskAutoConfigurationTests {
 
 	}
 
+	@EnableTask
+	@Configuration
+	public static class TaskLifecycleListenerConfiguration {
+
+	}
+
 }
diff --git a/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/TaskCoreTests.java b/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/TaskCoreTests.java
index 6441a4eb..528530a1 100644
--- a/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/TaskCoreTests.java
+++ b/spring-cloud-task-core/src/test/java/org/springframework/cloud/task/TaskCoreTests.java
@@ -145,6 +145,7 @@ public class TaskCoreTests {
 				output.contains(EXCEPTION_INVALID_TASK_EXECUTION_ID));
 	}
 
+	@EnableTask
 	@ImportAutoConfiguration({SimpleTaskAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class})
 	public static class TaskConfiguration {
 
@@ -172,6 +173,7 @@ public class TaskCoreTests {
 		}
 	}
 
+	@EnableTask
 	@ImportAutoConfiguration({SimpleTaskAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class})
 	public static class TaskExceptionConfiguration {
 
diff --git a/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/executionid/TaskStartApplication.java b/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/executionid/TaskStartApplication.java
index c09e3079..bc922490 100644
--- a/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/executionid/TaskStartApplication.java
+++ b/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/executionid/TaskStartApplication.java
@@ -19,11 +19,13 @@ package org.springframework.cloud.task.executionid;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.task.configuration.EnableTask;
 import org.springframework.context.annotation.Bean;
 
 /**
  * @author Glenn Renfro
  */
+@EnableTask
 @SpringBootApplication
 public class TaskStartApplication {
 
diff --git a/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/listener/BatchExecutionEventTests.java b/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/listener/BatchExecutionEventTests.java
index ae1c44ff..b50a14bc 100644
--- a/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/listener/BatchExecutionEventTests.java
+++ b/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/listener/BatchExecutionEventTests.java
@@ -37,6 +37,7 @@ import org.springframework.cloud.stream.messaging.Sink;
 import org.springframework.cloud.task.batch.listener.BatchEventAutoConfiguration;
 import org.springframework.cloud.task.batch.listener.support.JobExecutionEvent;
 import org.springframework.cloud.task.batch.listener.support.StepExecutionEvent;
+import org.springframework.cloud.task.configuration.EnableTask;
 import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.context.annotation.PropertySource;
 
@@ -157,6 +158,7 @@ public class BatchExecutionEventTests {
 	@EnableBinding(Sink.class)
 	@PropertySource("classpath:/org/springframework/cloud/task/listener/job-execution-sink-channel.properties")
 	@EnableAutoConfiguration
+	@EnableTask
 	public static class ListenerBinding {
 
 		@StreamListener(Sink.INPUT)
@@ -169,6 +171,7 @@ public class BatchExecutionEventTests {
 	@EnableBinding(Sink.class)
 	@PropertySource("classpath:/org/springframework/cloud/task/listener/step-execution-sink-channel.properties")
 	@EnableAutoConfiguration
+	@EnableTask
 	public static class StepListenerBinding {
 
 		@StreamListener(Sink.INPUT)
@@ -187,6 +190,7 @@ public class BatchExecutionEventTests {
 	@EnableBinding(Sink.class)
 	@PropertySource("classpath:/org/springframework/cloud/task/listener/item-process-sink-channel.properties")
 	@EnableAutoConfiguration
+	@EnableTask
 	public static class ItemProcessListenerBinding {
 
 		@StreamListener(Sink.INPUT)
@@ -198,6 +202,7 @@ public class BatchExecutionEventTests {
 	@EnableBinding(Sink.class)
 	@PropertySource("classpath:/org/springframework/cloud/task/listener/chunk-events-sink-channel.properties")
 	@EnableAutoConfiguration
+	@EnableTask
 	public static class ChunkEventsListenerBinding {
 
 		@StreamListener(Sink.INPUT)
@@ -209,6 +214,7 @@ public class BatchExecutionEventTests {
 	@EnableBinding(Sink.class)
 	@PropertySource("classpath:/org/springframework/cloud/task/listener/item-read-events-sink-channel.properties")
 	@EnableAutoConfiguration
+	@EnableTask
 	public static class ItemReadEventsListenerBinding {
 
 		@StreamListener(Sink.INPUT)
@@ -220,6 +226,7 @@ public class BatchExecutionEventTests {
 	@EnableBinding(Sink.class)
 	@PropertySource("classpath:/org/springframework/cloud/task/listener/skip-events-sink-channel.properties")
 	@EnableAutoConfiguration
+	@EnableTask
 	public static class SkipEventsListenerBinding {
 		private static final String SKIPPING_READ_MESSAGE = "Skipped when reading.";
 		private static final String SKIPPING_WRITE_CONTENT = "-1";
@@ -238,6 +245,7 @@ public class BatchExecutionEventTests {
 	@EnableBinding(Sink.class)
 	@PropertySource("classpath:/org/springframework/cloud/task/listener/item-write-events-sink-channel.properties")
 	@EnableAutoConfiguration
+	@EnableTask
 	public static class ItemWriteEventsListenerBinding {
 
 		@StreamListener(Sink.INPUT)
diff --git a/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java b/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java
index ffad327e..1ed3179d 100644
--- a/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java
+++ b/spring-cloud-task-integration-tests/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java
@@ -34,6 +34,7 @@ import org.springframework.cloud.stream.binder.rabbit.config.RabbitServiceAutoCo
 import org.springframework.cloud.stream.binder.test.junit.rabbit.RabbitTestSupport;
 import org.springframework.cloud.stream.config.BindingServiceConfiguration;
 import org.springframework.cloud.stream.messaging.Sink;
+import org.springframework.cloud.task.configuration.EnableTask;
 import org.springframework.cloud.task.configuration.SimpleTaskAutoConfiguration;
 import org.springframework.cloud.task.configuration.SingleTaskConfiguration;
 import org.springframework.cloud.task.repository.TaskExecution;
@@ -64,12 +65,13 @@ public class TaskEventTests {
 	@Test
 	public void testTaskEventListener() throws Exception {
 		ApplicationContextRunner applicationContextRunner = new ApplicationContextRunner()
-				.withConfiguration(AutoConfigurations.of(TaskEventsConfiguration.class,
+				.withConfiguration(AutoConfigurations.of(
 						TaskEventAutoConfiguration.class,
 						PropertyPlaceholderAutoConfiguration.class,
 						RabbitServiceAutoConfiguration.class,
 						SimpleTaskAutoConfiguration.class,
 						BindingServiceConfiguration.class))
+				.withUserConfiguration(TaskEventsConfiguration.class)
 				.withPropertyValues("--spring.cloud.task.closecontext_enabled=false",
 						"--spring.cloud.task.name=" + TASK_NAME,
 						"--spring.main.web-environment=false",
@@ -82,6 +84,7 @@ public class TaskEventTests {
 		assertTrue(latch.await(1, TimeUnit.SECONDS));
 	}
 
+	@EnableTask
 	@Configuration
 	public static class TaskEventsConfiguration {
 	}
diff --git a/spring-cloud-task-samples/batch-events/src/main/java/io/spring/cloud/BatchEventsApplication.java b/spring-cloud-task-samples/batch-events/src/main/java/io/spring/cloud/BatchEventsApplication.java
index 63c829cd..d118d4cd 100644
--- a/spring-cloud-task-samples/batch-events/src/main/java/io/spring/cloud/BatchEventsApplication.java
+++ b/spring-cloud-task-samples/batch-events/src/main/java/io/spring/cloud/BatchEventsApplication.java
@@ -34,9 +34,11 @@ import org.springframework.batch.repeat.RepeatStatus;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.task.configuration.EnableTask;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+@EnableTask
 @SpringBootApplication
 @EnableBatchProcessing
 public class BatchEventsApplication {
diff --git a/spring-cloud-task-samples/batch-job/src/main/java/io/spring/BatchJobApplication.java b/spring-cloud-task-samples/batch-job/src/main/java/io/spring/BatchJobApplication.java
index 83c53610..5784904d 100644
--- a/spring-cloud-task-samples/batch-job/src/main/java/io/spring/BatchJobApplication.java
+++ b/spring-cloud-task-samples/batch-job/src/main/java/io/spring/BatchJobApplication.java
@@ -18,7 +18,9 @@ package io.spring;
 import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.task.configuration.EnableTask;
 
+@EnableTask
 @SpringBootApplication
 @EnableBatchProcessing
 public class BatchJobApplication {
diff --git a/spring-cloud-task-samples/jpa-sample/src/main/java/io/spring/JpaApplication.java b/spring-cloud-task-samples/jpa-sample/src/main/java/io/spring/JpaApplication.java
index 29bfbdf4..0dd47c1f 100644
--- a/spring-cloud-task-samples/jpa-sample/src/main/java/io/spring/JpaApplication.java
+++ b/spring-cloud-task-samples/jpa-sample/src/main/java/io/spring/JpaApplication.java
@@ -18,7 +18,9 @@ package io.spring;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.task.configuration.EnableTask;
 
+@EnableTask
 @SpringBootApplication
 public class JpaApplication {
 
diff --git a/spring-cloud-task-samples/multiple-datasources/src/main/java/io/spring/MultipleDataSourcesApplication.java b/spring-cloud-task-samples/multiple-datasources/src/main/java/io/spring/MultipleDataSourcesApplication.java
index 8d34fca5..023d6835 100644
--- a/spring-cloud-task-samples/multiple-datasources/src/main/java/io/spring/MultipleDataSourcesApplication.java
+++ b/spring-cloud-task-samples/multiple-datasources/src/main/java/io/spring/MultipleDataSourcesApplication.java
@@ -18,11 +18,13 @@ package io.spring;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.task.configuration.EnableTask;
 
 
 /**
  * @author Michael Minella
  */
+@EnableTask
 @SpringBootApplication
 public class MultipleDataSourcesApplication {
 
diff --git a/spring-cloud-task-samples/partitioned-batch-job/src/main/java/io/spring/PartitionedBatchJobApplication.java b/spring-cloud-task-samples/partitioned-batch-job/src/main/java/io/spring/PartitionedBatchJobApplication.java
index ba7ce209..9af7a883 100644
--- a/spring-cloud-task-samples/partitioned-batch-job/src/main/java/io/spring/PartitionedBatchJobApplication.java
+++ b/spring-cloud-task-samples/partitioned-batch-job/src/main/java/io/spring/PartitionedBatchJobApplication.java
@@ -18,7 +18,9 @@ package io.spring;
 import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.task.configuration.EnableTask;
 
+@EnableTask
 @SpringBootApplication
 @EnableBatchProcessing
 public class PartitionedBatchJobApplication {
diff --git a/spring-cloud-task-samples/task-events/src/main/java/io/spring/TaskEventsApplication.java b/spring-cloud-task-samples/task-events/src/main/java/io/spring/TaskEventsApplication.java
index f05bfac7..6d087192 100644
--- a/spring-cloud-task-samples/task-events/src/main/java/io/spring/TaskEventsApplication.java
+++ b/spring-cloud-task-samples/task-events/src/main/java/io/spring/TaskEventsApplication.java
@@ -18,9 +18,11 @@ package io.spring;
 import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.task.configuration.EnableTask;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+@EnableTask
 @SpringBootApplication
 public class TaskEventsApplication {
 
diff --git a/spring-cloud-task-samples/timestamp/src/main/java/org/springframework/cloud/task/timestamp/TaskApplication.java b/spring-cloud-task-samples/timestamp/src/main/java/org/springframework/cloud/task/timestamp/TaskApplication.java
index e03e912d..6689502f 100644
--- a/spring-cloud-task-samples/timestamp/src/main/java/org/springframework/cloud/task/timestamp/TaskApplication.java
+++ b/spring-cloud-task-samples/timestamp/src/main/java/org/springframework/cloud/task/timestamp/TaskApplication.java
@@ -29,11 +29,14 @@ import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.cloud.task.configuration.EnableTask;
 import org.springframework.context.annotation.Bean;
 
 /**
  * Spring Boot Application that has tasks enabled.
  */
+
+@EnableTask
 @SpringBootApplication
 @EnableConfigurationProperties({ TimestampTaskProperties.class })
 public class TaskApplication {
diff --git a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java
index ffe4f1f2..5b515557 100644
--- a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java
+++ b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/listener/TaskEventTests.java
@@ -23,6 +23,7 @@ import org.springframework.boot.autoconfigure.jdbc.EmbeddedDataSourceConfigurati
 import org.springframework.boot.test.context.runner.ApplicationContextRunner;
 import org.springframework.cloud.stream.config.BindingServiceConfiguration;
 import org.springframework.cloud.stream.test.binder.TestSupportBinderAutoConfiguration;
+import org.springframework.cloud.task.configuration.EnableTask;
 import org.springframework.cloud.task.configuration.SimpleTaskAutoConfiguration;
 import org.springframework.cloud.task.configuration.SingleTaskConfiguration;
 import org.springframework.context.annotation.Bean;
@@ -58,6 +59,7 @@ public class TaskEventTests {
 		});
 	}
 
+	@EnableTask
 	@Configuration
 	public static class TaskEventsConfiguration {