diff --git a/pom.xml b/pom.xml
index 08094199..00ac47f7 100755
--- a/pom.xml
+++ b/pom.xml
@@ -70,7 +70,7 @@
spring-cloud-task-docs
spring-cloud-task-batch
spring-cloud-task-stream
- spring-cloud-task-integration-tests
+ spring-cloud-task-starter
@@ -224,5 +224,11 @@
spring-cloud-task-samples
+
+ integration-test
+
+ spring-cloud-task-integration-tests
+
+
diff --git a/spring-cloud-task-batch/pom.xml b/spring-cloud-task-batch/pom.xml
index 42f72278..3ad4d37c 100644
--- a/spring-cloud-task-batch/pom.xml
+++ b/spring-cloud-task-batch/pom.xml
@@ -29,6 +29,11 @@
spring-cloud-deployer-local
test
+
+ org.springframework.cloud
+ spring-cloud-deployer-resource-support
+ true
+
org.springframework.batch
spring-batch-integration
@@ -43,6 +48,7 @@
org.springframework
spring-test
+ test
junit
diff --git a/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/partition/DeployerPartitionHandler.java b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/partition/DeployerPartitionHandler.java
index d69453c9..0119d2c9 100644
--- a/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/partition/DeployerPartitionHandler.java
+++ b/spring-cloud-task-batch/src/main/java/org/springframework/cloud/task/batch/partition/DeployerPartitionHandler.java
@@ -105,6 +105,8 @@ public class DeployerPartitionHandler implements PartitionHandler, EnvironmentAw
private Environment environment;
+ private Map deploymentProperties;
+
public DeployerPartitionHandler(TaskLauncher taskLauncher,
JobExplorer jobExplorer,
Resource resource,
@@ -168,6 +170,15 @@ public class DeployerPartitionHandler implements PartitionHandler, EnvironmentAw
this.timeout = timeout;
}
+ /**
+ * Map of deployment properties to be used by the {@link TaskLauncher}
+ *
+ * @param deploymentProperties
+ */
+ public void setDeploymentProperties(Map deploymentProperties) {
+ this.deploymentProperties = deploymentProperties;
+ }
+
@BeforeTask
public void beforeTask(TaskExecution taskExecution) {
this.taskExecution = taskExecution;
@@ -213,32 +224,38 @@ public class DeployerPartitionHandler implements PartitionHandler, EnvironmentAw
}
private void launchWorker(StepExecution workerStepExecution) {
- //TODO: Refactor these to be passed as command line args once SCD-20 is complete
- // https://github.com/spring-cloud/spring-cloud-deployer/issues/20
- Map arguments = getArguments(this.taskExecution.getArguments());
- arguments.put(SPRING_CLOUD_TASK_JOB_EXECUTION_ID,
- String.valueOf(workerStepExecution.getJobExecution().getId()));
- arguments.put(SPRING_CLOUD_TASK_STEP_EXECUTION_ID,
- String.valueOf(workerStepExecution.getId()));
- arguments.put(SPRING_CLOUD_TASK_STEP_NAME, this.stepName);
+ List arguments = new ArrayList<>();
+ arguments.addAll(this.taskExecution.getArguments());
+ arguments.add(formatArgument(SPRING_CLOUD_TASK_JOB_EXECUTION_ID,
+ String.valueOf(workerStepExecution.getJobExecution().getId())));
+ arguments.add(formatArgument(SPRING_CLOUD_TASK_STEP_EXECUTION_ID,
+ String.valueOf(workerStepExecution.getId())));
+ arguments.add(formatArgument(SPRING_CLOUD_TASK_STEP_NAME, this.stepName));
+
+ Map environmentProperties = new HashMap<>(this.environmentProperties.size());
+ environmentProperties.putAll(getCurrentEnvironmentProperties());
+ environmentProperties.putAll(this.environmentProperties);
AppDefinition definition =
new AppDefinition(String.format("%s:%s:%s",
taskExecution.getTaskName(),
workerStepExecution.getJobExecution().getJobInstance().getJobName(),
workerStepExecution.getStepName()),
- arguments);
-
- Map environmentProperties = new HashMap<>(this.environmentProperties.size());
- environmentProperties.putAll(getCurrentEnvironmentProperties());
- environmentProperties.putAll(this.environmentProperties);
+ environmentProperties);
AppDeploymentRequest request =
- new AppDeploymentRequest(definition, this.resource, environmentProperties);
+ new AppDeploymentRequest(definition,
+ this.resource,
+ this.deploymentProperties,
+ arguments);
taskLauncher.launch(request);
}
+ private String formatArgument(String key, String value) {
+ return String.format("--%s=%s", key, value);
+ }
+
private Collection pollReplies(final StepExecution masterStepExecution,
final Set executed,
final Set candidates,
diff --git a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/partition/DeployerPartitionHandlerTests.java b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/partition/DeployerPartitionHandlerTests.java
index 15470461..6d295831 100644
--- a/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/partition/DeployerPartitionHandlerTests.java
+++ b/spring-cloud-task-batch/src/test/java/org/springframework/cloud/task/batch/partition/DeployerPartitionHandlerTests.java
@@ -147,9 +147,9 @@ public class DeployerPartitionHandlerTests {
AppDefinition appDefinition = request.getDefinition();
assertEquals("partitionedJobTask:partitionedJob:step1:partition1", appDefinition.getName());
- assertEquals("1", appDefinition.getProperties().get(DeployerPartitionHandler.SPRING_CLOUD_TASK_JOB_EXECUTION_ID));
- assertEquals("4", appDefinition.getProperties().get(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_EXECUTION_ID));
- assertEquals("step1", appDefinition.getProperties().get(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_NAME));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_JOB_EXECUTION_ID, "1")));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_EXECUTION_ID, "4")));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_NAME, "step1")));
assertEquals(1, results.size());
StepExecution resultStepExecution = results.iterator().next();
@@ -344,16 +344,16 @@ public class DeployerPartitionHandlerTests {
AppDeploymentRequest request = this.appDeploymentRequestArgumentCaptor.getValue();
assertEquals(this.resource, request.getResource());
- assertEquals(2, request.getDeploymentProperties().size());
- assertEquals("bar", request.getDeploymentProperties().get("foo"));
- assertEquals("qux", request.getDeploymentProperties().get("baz"));
+ assertEquals(2, request.getDefinition().getProperties().size());
+ assertEquals("bar", request.getDefinition().getProperties().get("foo"));
+ assertEquals("qux", request.getDefinition().getProperties().get("baz"));
AppDefinition appDefinition = request.getDefinition();
assertEquals("partitionedJobTask:partitionedJob:step1:partition1", appDefinition.getName());
- assertEquals("1", appDefinition.getProperties().get(DeployerPartitionHandler.SPRING_CLOUD_TASK_JOB_EXECUTION_ID));
- assertEquals("4", appDefinition.getProperties().get(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_EXECUTION_ID));
- assertEquals("step1", appDefinition.getProperties().get(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_NAME));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_JOB_EXECUTION_ID, "1")));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_EXECUTION_ID, "4")));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_NAME, "step1")));
assertEquals(1, results.size());
StepExecution resultStepExecution = results.iterator().next();
@@ -361,6 +361,10 @@ public class DeployerPartitionHandlerTests {
assertEquals("step1:partition1", resultStepExecution.getStepName());
}
+ private String formatArgs(String key, String value) {
+ return String.format("--%s=%s", key, value);
+ }
+
@Test
public void testOverridingEnvironmentProperties() throws Exception {
@@ -399,17 +403,17 @@ public class DeployerPartitionHandlerTests {
AppDeploymentRequest request = this.appDeploymentRequestArgumentCaptor.getValue();
assertEquals(this.resource, request.getResource());
- assertEquals(3, request.getDeploymentProperties().size());
- assertEquals("bar", request.getDeploymentProperties().get("foo"));
- assertEquals("qux", request.getDeploymentProperties().get("baz"));
- assertEquals("batch", request.getDeploymentProperties().get("task"));
+ assertEquals(3, request.getDefinition().getProperties().size());
+ assertEquals("bar", request.getDefinition().getProperties().get("foo"));
+ assertEquals("qux", request.getDefinition().getProperties().get("baz"));
+ assertEquals("batch", request.getDefinition().getProperties().get("task"));
AppDefinition appDefinition = request.getDefinition();
assertEquals("partitionedJobTask:partitionedJob:step1:partition1", appDefinition.getName());
- assertEquals("1", appDefinition.getProperties().get(DeployerPartitionHandler.SPRING_CLOUD_TASK_JOB_EXECUTION_ID));
- assertEquals("4", appDefinition.getProperties().get(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_EXECUTION_ID));
- assertEquals("step1", appDefinition.getProperties().get(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_NAME));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_JOB_EXECUTION_ID, "1")));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_EXECUTION_ID, "4")));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_NAME, "step1")));
assertEquals(1, results.size());
StepExecution resultStepExecution = results.iterator().next();
@@ -539,6 +543,58 @@ public class DeployerPartitionHandlerTests {
validateStepExecutionResults(results);
}
+ @Test
+ public void testDeployerProperties() throws Exception {
+
+ StepExecution masterStepExecution = createMasterStepExecution();
+ JobExecution jobExecution = masterStepExecution.getJobExecution();
+
+ StepExecution workerStepExecutionStart = getStepExecutionStart(jobExecution, 4L);
+ StepExecution workerStepExecutionFinish = getStepExecutionFinish(workerStepExecutionStart, BatchStatus.COMPLETED);
+
+ DeployerPartitionHandler handler = new DeployerPartitionHandler(this.taskLauncher, this.jobExplorer, this.resource, "step1");
+ handler.setEnvironment(this.environment);
+
+ Map deploymentProperties = new HashMap<>(2);
+ deploymentProperties.put("foo", "bar");
+ deploymentProperties.put("baz", "qux");
+
+ handler.setDeploymentProperties(deploymentProperties);
+
+ TaskExecution taskExecution = new TaskExecution();
+ taskExecution.setTaskName("partitionedJobTask");
+
+ Set stepExecutions = new HashSet<>();
+ stepExecutions.add(workerStepExecutionStart);
+ when(this.splitter.split(masterStepExecution, 1)).thenReturn(stepExecutions);
+
+ when(this.jobExplorer.getStepExecution(1L, 4L)).thenReturn(workerStepExecutionFinish);
+
+ handler.beforeTask(taskExecution);
+ Collection results = handler.handle(this.splitter, masterStepExecution);
+
+ verify(this.taskLauncher).launch(this.appDeploymentRequestArgumentCaptor.capture());
+
+ AppDeploymentRequest request = this.appDeploymentRequestArgumentCaptor.getValue();
+
+ assertEquals(this.resource, request.getResource());
+ assertEquals(2, request.getDeploymentProperties().size());
+ assertEquals("bar", request.getDeploymentProperties().get("foo"));
+ assertEquals("qux", request.getDeploymentProperties().get("baz"));
+
+ AppDefinition appDefinition = request.getDefinition();
+
+ assertEquals("partitionedJobTask:partitionedJob:step1:partition1", appDefinition.getName());
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_JOB_EXECUTION_ID, "1")));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_EXECUTION_ID, "4")));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_NAME, "step1")));
+
+ assertEquals(1, results.size());
+ StepExecution resultStepExecution = results.iterator().next();
+ assertEquals(BatchStatus.COMPLETED, resultStepExecution.getStatus());
+ assertEquals("step1:partition1", resultStepExecution.getStepName());
+ }
+
private StepExecution getStepExecutionFinish(StepExecution stepExecutionStart, BatchStatus status) {
StepExecution workerStepExecutionFinish = new StepExecution(stepExecutionStart.getStepName(), stepExecutionStart.getJobExecution());
workerStepExecutionFinish.setId(stepExecutionStart.getId());
@@ -592,9 +648,9 @@ public class DeployerPartitionHandlerTests {
AppDefinition appDefinition = request.getDefinition();
assertEquals("partitionedJobTask:partitionedJob:step1:partition" + (i - 3), appDefinition.getName());
- assertEquals("1", appDefinition.getProperties().get(DeployerPartitionHandler.SPRING_CLOUD_TASK_JOB_EXECUTION_ID));
- assertEquals(String.valueOf(i), appDefinition.getProperties().get(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_EXECUTION_ID));
- assertEquals("step1", appDefinition.getProperties().get(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_NAME));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_JOB_EXECUTION_ID, "1")));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_EXECUTION_ID, String.valueOf(i))));
+ assertTrue(request.getCommandlineArguments().contains(formatArgs(DeployerPartitionHandler.SPRING_CLOUD_TASK_STEP_NAME, "step1")));
}
}
diff --git a/spring-cloud-task-core/pom.xml b/spring-cloud-task-core/pom.xml
index 6f7c1391..166e4501 100755
--- a/spring-cloud-task-core/pom.xml
+++ b/spring-cloud-task-core/pom.xml
@@ -19,6 +19,15 @@
org.springframework.boot
spring-boot-starter
+
+ org.springframework.cloud
+ spring-cloud-deployer-resource-support
+
+
+ org.springframework.cloud
+ spring-cloud-deployer-resource-maven
+ true
+
org.springframework
spring-jdbc
@@ -42,10 +51,6 @@
org.springframework.batch
spring-batch-infrastructure
-
- org.springframework.batch
- spring-batch-core
-
org.springframework.data
spring-data-commons
diff --git a/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/ResourceLoadingAutoConfiguration.java b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/ResourceLoadingAutoConfiguration.java
new file mode 100644
index 00000000..ea1e208b
--- /dev/null
+++ b/spring-cloud-task-core/src/main/java/org/springframework/cloud/task/configuration/ResourceLoadingAutoConfiguration.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2016 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 java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.deployer.resource.maven.MavenProperties;
+import org.springframework.cloud.deployer.resource.maven.MavenResourceLoader;
+import org.springframework.cloud.deployer.resource.support.DelegatingResourceLoader;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.ResourceLoader;
+
+/**
+ * Autoconfiguration of a file or Maven based {@link ResourceLoader}.
+ *
+ * @author Michael Minella
+ * @since 1.0.1
+ */
+@Configuration
+public class ResourceLoadingAutoConfiguration {
+
+ @Configuration
+ @ConditionalOnClass(MavenResourceLoader.class)
+ public static class MavenResourceLoadingAutoConfiguration {
+
+ @Bean
+ public MavenResourceLoader mavenResourceLoader(MavenProperties mavenProperties) {
+ return new MavenResourceLoader(mavenProperties);
+ }
+
+ @Bean
+ @ConditionalOnMissingBean
+ public DelegatingResourceLoader delegatingResourceLoader(MavenResourceLoader mavenResourceLoader) {
+ Map loaders = new HashMap<>(1);
+ loaders.put("maven", mavenResourceLoader);
+
+ return new DelegatingResourceLoader(loaders);
+ }
+
+ @Bean
+ public MavenProperties mavenProperties() {
+ return new MavenConfigurationProperties();
+ }
+
+ @ConfigurationProperties(prefix = "maven")
+ public static class MavenConfigurationProperties extends MavenProperties {}
+ }
+
+ @Configuration
+ @ConditionalOnMissingClass("org.springframework.cloud.deployer.resource.maven.MavenResourceLoader")
+ public static class LocalResourceLoadingAutoConfiguration {
+
+ @Bean
+ @ConditionalOnMissingBean
+ public DelegatingResourceLoader delegatingResourceLoader(ApplicationContext context) {
+ Map loaders = new HashMap<>(1);
+ loaders.put("file", context);
+
+ return new DelegatingResourceLoader(loaders);
+ }
+ }
+}
diff --git a/spring-cloud-task-core/src/main/resources/META-INF/spring.factories b/spring-cloud-task-core/src/main/resources/META-INF/spring.factories
new file mode 100644
index 00000000..22ff66d1
--- /dev/null
+++ b/spring-cloud-task-core/src/main/resources/META-INF/spring.factories
@@ -0,0 +1 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.springframework.cloud.task.configuration.ResourceLoadingAutoConfiguration
diff --git a/spring-cloud-task-dependencies/pom.xml b/spring-cloud-task-dependencies/pom.xml
index fdbfb5d1..b79e24fc 100644
--- a/spring-cloud-task-dependencies/pom.xml
+++ b/spring-cloud-task-dependencies/pom.xml
@@ -1,6 +1,5 @@
- org.springframework.cloud
4.0.0
spring-cloud-task-dependencies
1.0.1.BUILD-SNAPSHOT
@@ -17,10 +16,12 @@
1.0.2.RELEASE
- 1.0.0.RELEASE
- 1.0.0.RELEASE
+ 1.0.1.RELEASE
+ 1.0.1.RELEASE
1.0.2.RELEASE
- 1.0.0.RELEASE
+ 1.0.1.RELEASE
+ 1.0.1.RELEASE
+ 3.0.7.RELEASE
@@ -65,15 +66,10 @@
${spring-cloud-deployer-local.version}
true
-
- org.springframework.cloud
- spring-cloud-deployer-local
- ${spring-cloud-deployer-spi.version}
-
org.springframework.cloud
spring-cloud-deployer-resource-support
- ${spring.cloud.deployer.resource.support}
+ ${spring-cloud-deployer-resource-support.version}
org.springframework.cloud
@@ -81,6 +77,16 @@
${spring-cloud-stream-binder-rabbit.version}
test
+
+ org.springframework.cloud
+ spring-cloud-deployer-resource-maven
+ ${spring-cloud-deployer-resource-maven.version}
+
+
+ org.springframework.batch
+ spring-batch-core
+ ${spring-batch.version}
+
diff --git a/spring-cloud-task-docs/src/main/asciidoc/batch.adoc b/spring-cloud-task-docs/src/main/asciidoc/batch.adoc
index 0e61bc17..17f48a0c 100644
--- a/spring-cloud-task-docs/src/main/asciidoc/batch.adoc
+++ b/spring-cloud-task-docs/src/main/asciidoc/batch.adoc
@@ -64,11 +64,16 @@ look like the following:
@Bean
public PartitionHandler partitionHandler(TaskLauncher taskLauncher,
JobExplorer jobExplorer) throws Exception {
- MavenResource resource =
+
+ MavenProperties mavenProperties = new MavenProperties();
+ mavenProperties.setRemoteRepositories(new HashMap<>(Collections.singletonMap("springRepo",
+ new MavenProperties.RemoteRepository(repository))));
+
+ MavenResource resource =
MavenResource.parse(String.format("%s:%s:%s",
"io.spring.cloud",
"partitioned-batch-job",
- "1.0.0.RELEASE"));
+ "1.0.0.RELEASE"), mavenProperties);
DeployerPartitionHandler partitionHandler =
new DeployerPartitionHandler(taskLauncher, jobExplorer, resource, "workerStep");
@@ -85,11 +90,12 @@ public PartitionHandler partitionHandler(TaskLauncher taskLauncher,
The `Resource` to be executed is expected to be a Spring Boot über-jar with a
`DeployerStepExecutionHandler` configured as a `CommandLineRunner` in the current context.
-Both the master and slave are expected to have visibility into the same data store being
-used as the job repository and task repository. Once the underlying infrastructure has
-bootstrapped the Spring Boot jar and Spring Boot has launched the
-`DeployerStepExecutionHandler`, the step handler will execute the Step requested. An
-example of configuring the `DefaultStepExecutionHandler`:
+The repository enumerated in the example above should be the location of the remote repository
+from which the über-jar is located. Both the master and slave are expected to have
+visibility into the same data store being used as the job repository and task repository.
+Once the underlying infrastructure has bootstrapped the Spring Boot jar and Spring Boot
+has launched the `DeployerStepExecutionHandler`, the step handler will execute the Step
+requested. An example of configuring the `DefaultStepExecutionHandler` is show below:
```
@Bean
diff --git a/spring-cloud-task-docs/src/main/asciidoc/stream.adoc b/spring-cloud-task-docs/src/main/asciidoc/stream.adoc
index 1feb90bb..a292b4e9 100644
--- a/spring-cloud-task-docs/src/main/asciidoc/stream.adoc
+++ b/spring-cloud-task-docs/src/main/asciidoc/stream.adoc
@@ -42,6 +42,10 @@ repository execute a maven build from the `spring-cloud-task-samples` directory
property `skipInstall` set to false. For example:
`mvn clean install`.
+NOTE: The maven.remoteRepositories.springRepo.url property will need to be set to
+the location of the remote repository from which the über-jar is located. If not
+set, then there will be no remote repository, so it will rely upon the local repository only.
+
[[stream-integration-launching-sink-dataflow]]
=== Spring Cloud Data Flow
diff --git a/spring-cloud-task-integration-tests/pom.xml b/spring-cloud-task-integration-tests/pom.xml
index 5fe04979..78af7978 100644
--- a/spring-cloud-task-integration-tests/pom.xml
+++ b/spring-cloud-task-integration-tests/pom.xml
@@ -36,5 +36,14 @@
spring-cloud-task-batch
test
+
+ org.springframework.batch
+ spring-batch-core
+ test
+
+
+ org.springframework.cloud
+ spring-cloud-deployer-resource-support
+
diff --git a/spring-cloud-task-samples/batch-events/README.adoc b/spring-cloud-task-samples/batch-events/README.adoc
index 60ffc037..cf54107e 100644
--- a/spring-cloud-task-samples/batch-events/README.adoc
+++ b/spring-cloud-task-samples/batch-events/README.adoc
@@ -27,7 +27,7 @@ $ ./mvnw clean install
[source,shell,indent=2]
----
-$ java -jar target/batch-events-1.0.0.BUILD-SNAPSHOT.jar --spring.cloud.stream.bindings.batch-events.contentType=application/json
+$ java -jar target/batch-events-1.0.1.BUILD-SNAPSHOT.jar --spring.cloud.stream.bindings.batch-events.contentType=application/json
----
For example you can listen for specific job execution events on a specified channel with a Spring Cloud Stream Sink
@@ -35,7 +35,7 @@ like the log sink using the following:
[source,shell,indent=2]
----
-$ java -jar /log-sink-rabbit-1.0.0.BUILD-SNAPSHOT.jar --server.port=9090
+$ java -jar /log-sink-rabbit-1.0.1.BUILD-SNAPSHOT.jar --server.port=9090
--spring.cloud.stream.bindings.input.destination=job-execution-events
----
diff --git a/spring-cloud-task-samples/batch-events/pom.xml b/spring-cloud-task-samples/batch-events/pom.xml
index a151aca6..29831ebc 100644
--- a/spring-cloud-task-samples/batch-events/pom.xml
+++ b/spring-cloud-task-samples/batch-events/pom.xml
@@ -34,14 +34,6 @@
-
- org.springframework.cloud
- spring-cloud-task-core
-
-
- org.springframework.cloud
- spring-cloud-task-stream
-
org.springframework.boot
spring-boot-starter-batch
@@ -65,6 +57,11 @@
spring-cloud-stream-test-support-internal
test
+
+ org.springframework.cloud
+ spring-cloud-task-starter
+ 1.0.1.BUILD-SNAPSHOT
+
diff --git a/spring-cloud-task-samples/batch-job/README.adoc b/spring-cloud-task-samples/batch-job/README.adoc
index 599732d0..c8b21541 100644
--- a/spring-cloud-task-samples/batch-job/README.adoc
+++ b/spring-cloud-task-samples/batch-job/README.adoc
@@ -22,5 +22,5 @@ $ mvn clean package
[source,shell,indent=2]
----
-$ java -jar target/batch-job-1.0.0.BUILD-SNAPSHOT.jar
+$ java -jar target/batch-job-1.0.1.BUILD-SNAPSHOT.jar
----
diff --git a/spring-cloud-task-samples/batch-job/pom.xml b/spring-cloud-task-samples/batch-job/pom.xml
index dea7860a..7a19a528 100644
--- a/spring-cloud-task-samples/batch-job/pom.xml
+++ b/spring-cloud-task-samples/batch-job/pom.xml
@@ -40,11 +40,8 @@
org.springframework.cloud
- spring-cloud-task-core
-
-
- org.springframework.cloud
- spring-cloud-task-batch
+ spring-cloud-task-starter
+ 1.0.1.BUILD-SNAPSHOT
com.h2database
diff --git a/spring-cloud-task-samples/partitioned-batch-job/README.adoc b/spring-cloud-task-samples/partitioned-batch-job/README.adoc
index 8d83aaf3..873a028a 100644
--- a/spring-cloud-task-samples/partitioned-batch-job/README.adoc
+++ b/spring-cloud-task-samples/partitioned-batch-job/README.adoc
@@ -22,7 +22,7 @@ $ export spring_datasource_url=jdbc:mysql://localhost:3306/
$ export spring_datasource_username=
$ export spring_datasource_password=
$ export spring_datasource_driverClassName=org.mariadb.jdbc.Driver
-$ java -jar -Dspring.profiles.active=master target/partitioned-batch-job-1.0.0.BUILD-SNAPSHOT.jar
+$ java -jar -Dspring.profiles.active=master target/partitioned-batch-job-1.0.1.BUILD-SNAPSHOT.jar
----
NOTE: This example will use require a MySql RDBMS repository and currently uses the mariadb jdbc driver to connect.
diff --git a/spring-cloud-task-samples/partitioned-batch-job/pom.xml b/spring-cloud-task-samples/partitioned-batch-job/pom.xml
index 82dc2190..7409d16f 100644
--- a/spring-cloud-task-samples/partitioned-batch-job/pom.xml
+++ b/spring-cloud-task-samples/partitioned-batch-job/pom.xml
@@ -40,7 +40,8 @@
org.springframework.cloud
- spring-cloud-task-batch
+ spring-cloud-task-starter
+ 1.0.1.BUILD-SNAPSHOT
@@ -62,7 +63,7 @@
org.springframework.boot
spring-boot-starter-jdbc
-
+
org.springframework.boot
spring-boot-starter-test
diff --git a/spring-cloud-task-samples/partitioned-batch-job/src/main/java/io/spring/JobConfiguration.java b/spring-cloud-task-samples/partitioned-batch-job/src/main/java/io/spring/JobConfiguration.java
index e6b43492..79a545c9 100644
--- a/spring-cloud-task-samples/partitioned-batch-job/src/main/java/io/spring/JobConfiguration.java
+++ b/spring-cloud-task-samples/partitioned-batch-job/src/main/java/io/spring/JobConfiguration.java
@@ -38,6 +38,7 @@ import org.springframework.batch.repeat.RepeatStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.deployer.resource.maven.MavenResource;
+import org.springframework.cloud.deployer.resource.support.DelegatingResourceLoader;
import org.springframework.cloud.deployer.spi.local.LocalDeployerProperties;
import org.springframework.cloud.deployer.spi.local.LocalTaskLauncher;
import org.springframework.cloud.deployer.spi.task.TaskLauncher;
@@ -47,6 +48,7 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
+import org.springframework.core.io.Resource;
/**
* @author Michael Minella
@@ -69,6 +71,9 @@ public class JobConfiguration {
@Autowired
private ConfigurableApplicationContext context;
+ @Autowired
+ private DelegatingResourceLoader delegatingResourceLoader;
+
private static final int GRID_SIZE = 4;
@Bean
@@ -91,7 +96,7 @@ public class JobConfiguration {
@Bean
public PartitionHandler partitionHandler(TaskLauncher taskLauncher, JobExplorer jobExplorer) throws Exception {
- MavenResource resource = MavenResource.parse("io.spring.cloud:partitioned-batch-job:1.0.0.BUILD-SNAPSHOT");
+ Resource resource = delegatingResourceLoader.getResource("maven://io.spring.cloud:partitioned-batch-job:1.0.1.BUILD-SNAPSHOT");
DeployerPartitionHandler partitionHandler = new DeployerPartitionHandler(taskLauncher, jobExplorer, resource, "workerStep");
diff --git a/spring-cloud-task-samples/partitioned-batch-job/src/main/resources/application.properties b/spring-cloud-task-samples/partitioned-batch-job/src/main/resources/application.properties
index 4c9aa713..db26a862 100644
--- a/spring-cloud-task-samples/partitioned-batch-job/src/main/resources/application.properties
+++ b/spring-cloud-task-samples/partitioned-batch-job/src/main/resources/application.properties
@@ -1,2 +1,3 @@
spring.application.name=Partitioned Batch Job Task
logging.level.org.springframework.cloud.task=DEBUG
+maven.remoteRepositories.springRepo.url=https://repo.spring.io/libs-snapshot
diff --git a/spring-cloud-task-samples/task-events/README.adoc b/spring-cloud-task-samples/task-events/README.adoc
index 357c8888..58bd84b9 100644
--- a/spring-cloud-task-samples/task-events/README.adoc
+++ b/spring-cloud-task-samples/task-events/README.adoc
@@ -17,7 +17,7 @@ $ ./mvnw clean install
[source,shell,indent=2]
----
-$ java -jar target/task-events-1.0.0.BUILD-SNAPSHOT.jar --spring.cloud.stream.bindings.task-events.contentType=application/json
+$ java -jar target/task-events-1.0.1.BUILD-SNAPSHOT.jar --spring.cloud.stream.bindings.task-events.contentType=application/json
----
You can listen for the events on the task-events channel with a Spring Cloud Stream Sink
@@ -25,7 +25,7 @@ like the log sink using the following:
[source,shell,indent=2]
----
-$ java -jar /log-sink-rabbit-1.0.0.BUILD-SNAPSHOT.jar --server.port=9090 --spring.cloud.stream.bindings.input.destination=task-events
+$ java -jar /log-sink-rabbit-1.0.1.BUILD-SNAPSHOT.jar --server.port=9090 --spring.cloud.stream.bindings.input.destination=task-events
----
== Dependencies:
diff --git a/spring-cloud-task-samples/task-events/pom.xml b/spring-cloud-task-samples/task-events/pom.xml
index 4bff6de7..dfc6b3bc 100644
--- a/spring-cloud-task-samples/task-events/pom.xml
+++ b/spring-cloud-task-samples/task-events/pom.xml
@@ -41,12 +41,8 @@
org.springframework.cloud
- spring-cloud-task-core
-
-
-
- org.springframework.cloud
- spring-cloud-task-stream
+ spring-cloud-task-starter
+ 1.0.1.BUILD-SNAPSHOT
diff --git a/spring-cloud-task-samples/taskprocessor/pom.xml b/spring-cloud-task-samples/taskprocessor/pom.xml
index 15cb53de..c0258bf2 100644
--- a/spring-cloud-task-samples/taskprocessor/pom.xml
+++ b/spring-cloud-task-samples/taskprocessor/pom.xml
@@ -40,7 +40,7 @@
org.springframework.cloud
- spring-cloud-task-stream
+ spring-cloud-task-starter
1.0.1.BUILD-SNAPSHOT
diff --git a/spring-cloud-task-samples/taskprocessor/src/main/java/io/spring/TaskProcessor.java b/spring-cloud-task-samples/taskprocessor/src/main/java/io/spring/TaskProcessor.java
index 5f570cb9..c712ecc8 100644
--- a/spring-cloud-task-samples/taskprocessor/src/main/java/io/spring/TaskProcessor.java
+++ b/spring-cloud-task-samples/taskprocessor/src/main/java/io/spring/TaskProcessor.java
@@ -58,7 +58,7 @@ public class TaskProcessor {
}
properties.put("payload", message);
- TaskLaunchRequest request = new TaskLaunchRequest(processorProperties.getUri(), null, properties);
+ TaskLaunchRequest request = new TaskLaunchRequest(processorProperties.getUri(), null, properties, null);
return new GenericMessage(request);
}
diff --git a/spring-cloud-task-samples/taskprocessor/src/test/java/io/spring/TaskProcessorApplicationTests.java b/spring-cloud-task-samples/taskprocessor/src/test/java/io/spring/TaskProcessorApplicationTests.java
index 6867e652..412d811e 100644
--- a/spring-cloud-task-samples/taskprocessor/src/test/java/io/spring/TaskProcessorApplicationTests.java
+++ b/spring-cloud-task-samples/taskprocessor/src/test/java/io/spring/TaskProcessorApplicationTests.java
@@ -16,15 +16,12 @@
package io.spring;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.springframework.cloud.stream.test.matcher.MessageQueueMatcher.receivesPayloadThat;
-
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import org.junit.runner.RunWith;
+
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.cloud.stream.annotation.Bindings;
@@ -34,6 +31,10 @@ import org.springframework.cloud.task.launcher.TaskLaunchRequest;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.springframework.cloud.stream.test.matcher.MessageQueueMatcher.receivesPayloadThat;
+
/**
* @author Glenn Renfro
*/
@@ -56,7 +57,7 @@ public class TaskProcessorApplicationTests {
Map properties = new HashMap();
properties.put("payload", DEFAULT_PAYLOAD);
TaskLaunchRequest expectedRequest = new TaskLaunchRequest("maven://org.springframework.cloud.task.app:"
- + "timestamp-task:jar:1.0.0.BUILD-SNAPSHOT", null, properties);
+ + "timestamp-task:jar:1.0.0.BUILD-SNAPSHOT", null, properties, null);
assertThat(collector.forChannel(channels.output()), receivesPayloadThat(is(expectedRequest)));
}
diff --git a/spring-cloud-task-samples/tasksink/pom.xml b/spring-cloud-task-samples/tasksink/pom.xml
index 6d5e18ea..9caee16a 100644
--- a/spring-cloud-task-samples/tasksink/pom.xml
+++ b/spring-cloud-task-samples/tasksink/pom.xml
@@ -44,7 +44,8 @@
org.springframework.cloud
- spring-cloud-task-stream
+ spring-cloud-task-starter
+ 1.0.1.BUILD-SNAPSHOT
org.springframework.cloud
diff --git a/spring-cloud-task-samples/tasksink/src/main/resources/application.properties b/spring-cloud-task-samples/tasksink/src/main/resources/application.properties
new file mode 100644
index 00000000..a2e7d812
--- /dev/null
+++ b/spring-cloud-task-samples/tasksink/src/main/resources/application.properties
@@ -0,0 +1 @@
+maven.remoteRepositories.springRepo.url=https://repo.spring.io/libs-snapshot
diff --git a/spring-cloud-task-samples/tasksink/src/test/java/io/spring/TaskSinkApplicationTests.java b/spring-cloud-task-samples/tasksink/src/test/java/io/spring/TaskSinkApplicationTests.java
index 2a3ce4da..d8651404 100644
--- a/spring-cloud-task-samples/tasksink/src/test/java/io/spring/TaskSinkApplicationTests.java
+++ b/spring-cloud-task-samples/tasksink/src/test/java/io/spring/TaskSinkApplicationTests.java
@@ -16,15 +16,13 @@
package io.spring;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
import java.util.HashMap;
import java.util.Map;
import io.spring.configuration.TaskSinkConfiguration;
import org.junit.Test;
import org.junit.runner.RunWith;
+
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.cloud.deployer.spi.task.LaunchState;
@@ -36,6 +34,9 @@ import org.springframework.context.ApplicationContext;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
/**
* @author Glenn Renfro
*/
@@ -60,7 +61,7 @@ public class TaskSinkApplicationTests {
Map properties = new HashMap();
properties.put("server.port", "0");
TaskLaunchRequest request = new TaskLaunchRequest("maven://org.springframework.cloud.task.app:"
- + "timestamp-task:jar:1.0.0.BUILD-SNAPSHOT", null, properties);
+ + "timestamp-task:jar:1.0.0.BUILD-SNAPSHOT", null, properties, null);
GenericMessage message = new GenericMessage(request);
this.sink.input().send(message);
assertEquals(LaunchState.complete, testTaskLauncher.status("TESTSTATUS").getState());
diff --git a/spring-cloud-task-samples/tasksink/src/test/resources/application.properties b/spring-cloud-task-samples/tasksink/src/test/resources/application.properties
new file mode 100644
index 00000000..a2e7d812
--- /dev/null
+++ b/spring-cloud-task-samples/tasksink/src/test/resources/application.properties
@@ -0,0 +1 @@
+maven.remoteRepositories.springRepo.url=https://repo.spring.io/libs-snapshot
diff --git a/spring-cloud-task-samples/timestamp/README.adoc b/spring-cloud-task-samples/timestamp/README.adoc
index 4bb0e0ee..f395dc9d 100644
--- a/spring-cloud-task-samples/timestamp/README.adoc
+++ b/spring-cloud-task-samples/timestamp/README.adoc
@@ -22,5 +22,5 @@ $ mvn clean package
[source,shell,indent=2]
----
-$ java -jar target/timestamp-task-1.0.0.BUILD-SNAPSHOT.jar
+$ java -jar target/timestamp-task-1.0.1.BUILD-SNAPSHOT.jar
----
diff --git a/spring-cloud-task-samples/timestamp/pom.xml b/spring-cloud-task-samples/timestamp/pom.xml
index 8d8f6232..c943d2de 100644
--- a/spring-cloud-task-samples/timestamp/pom.xml
+++ b/spring-cloud-task-samples/timestamp/pom.xml
@@ -45,7 +45,8 @@
org.springframework.cloud
- spring-cloud-task-core
+ spring-cloud-task-starter
+ 1.0.1.BUILD-SNAPSHOT
org.springframework.boot
diff --git a/spring-cloud-task-starter/pom.xml b/spring-cloud-task-starter/pom.xml
new file mode 100644
index 00000000..1c5f295d
--- /dev/null
+++ b/spring-cloud-task-starter/pom.xml
@@ -0,0 +1,31 @@
+
+
+
+ 4.0.0
+
+
+ org.springframework.cloud
+ spring-cloud-task-parent
+ 1.0.1.BUILD-SNAPSHOT
+
+
+ spring-cloud-task-starter
+ jar
+ Spring Cloud Task Starter
+ Spring Boot starter for Spring Cloud Task
+
+
+
+ org.springframework.cloud
+ spring-cloud-task-core
+
+
+ org.springframework.cloud
+ spring-cloud-task-batch
+
+
+ org.springframework.cloud
+ spring-cloud-task-stream
+
+
+
diff --git a/spring-cloud-task-stream/pom.xml b/spring-cloud-task-stream/pom.xml
index fe77892b..69f56da6 100644
--- a/spring-cloud-task-stream/pom.xml
+++ b/spring-cloud-task-stream/pom.xml
@@ -16,6 +16,7 @@
org.springframework.batch
spring-batch-core
+ true
org.springframework
@@ -26,6 +27,7 @@
org.springframework.cloud
spring-cloud-stream
+ true
org.springframework.cloud
@@ -70,6 +72,7 @@
org.springframework.cloud
spring-cloud-deployer-resource-support
+ true
diff --git a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/BatchEventAutoConfiguration.java b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/BatchEventAutoConfiguration.java
index f454063f..fceae03d 100644
--- a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/BatchEventAutoConfiguration.java
+++ b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/BatchEventAutoConfiguration.java
@@ -25,6 +25,7 @@ import org.springframework.batch.core.SkipListener;
import org.springframework.batch.core.StepExecutionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.stream.annotation.EnableBinding;
@@ -54,6 +55,7 @@ import org.springframework.messaging.MessageChannel;
* @author Glenn Renfro
*/
@Configuration
+@ConditionalOnClass(Job.class)
@ConditionalOnBean(value = { Job.class, TaskLifecycleListener.class })
@ConditionalOnProperty(prefix = "spring.cloud.task.batch.events", name = "enabled", havingValue = "true", matchIfMissing = true)
public class BatchEventAutoConfiguration {
@@ -68,11 +70,12 @@ public class BatchEventAutoConfiguration {
@Bean
@ConditionalOnMissingBean
- public TaskBatchEventListenerBeanPostProcessor batchTaskExecutionListenerBeanPostProcessor() {
+ public TaskBatchEventListenerBeanPostProcessor batchTaskEventListenerBeanPostProcessor() {
return new TaskBatchEventListenerBeanPostProcessor();
}
@Configuration
+ @ConditionalOnClass(EnableBinding.class)
@EnableBinding(BatchEventsChannels.class)
@ConditionalOnMissingBean(name = JOB_EXECUTION_EVENTS_LISTENER)
public static class JobExecutionListenerConfiguration {
diff --git a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/support/TaskBatchEventListenerBeanPostProcessor.java b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/support/TaskBatchEventListenerBeanPostProcessor.java
index 4ab24d9f..c8523eca 100644
--- a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/support/TaskBatchEventListenerBeanPostProcessor.java
+++ b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/batch/listener/support/TaskBatchEventListenerBeanPostProcessor.java
@@ -32,7 +32,6 @@ import org.springframework.batch.core.step.item.SimpleChunkProvider;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.core.step.tasklet.TaskletStep;
import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.cloud.task.batch.listener.BatchEventAutoConfiguration;
diff --git a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/launcher/TaskLaunchRequest.java b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/launcher/TaskLaunchRequest.java
index f3d54326..3aa34f87 100644
--- a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/launcher/TaskLaunchRequest.java
+++ b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/launcher/TaskLaunchRequest.java
@@ -37,21 +37,25 @@ public class TaskLaunchRequest implements Serializable{
private static final long serialVersionUID = 1L;
private String uri;
private List commandlineArguments;
- private Map properties;
+ private Map environmentProperties;
+ private Map deploymentProperties;
/**
* Constructor for the TaskLaunchRequest;
* @param uri the URI to the task artifact to be launched.
* @param commandlineArguments list of commandlineArguments to be used by the task
- * @param properties is the environment variables for this task.
+ * @param environmentProperties are the environment variables for this task.
+ * @param deploymentProperties are the variables used to setup task on the platform.
*/
public TaskLaunchRequest(String uri, List commandlineArguments,
- Map properties) {
+ Map environmentProperties,
+ Map deploymentProperties) {
Assert.hasText(uri, "uri must not be empty nor null.");
this.uri = uri;
this.commandlineArguments = (commandlineArguments == null) ? new ArrayList() : commandlineArguments;
- this.properties = properties == null ? new HashMap() : properties;
+ this.environmentProperties = environmentProperties == null ? new HashMap() : environmentProperties;
+ this.deploymentProperties = deploymentProperties == null ? new HashMap() : deploymentProperties;
}
/**
@@ -73,8 +77,17 @@ public class TaskLaunchRequest implements Serializable{
* @return map containing the environment variables for the task.
*/
- public Map getProperties() {
- return properties;
+ public Map getEnvironmentProperties() {
+ return environmentProperties;
+ }
+
+ /**
+ * Returns the properties used by a {@link org.springframework.cloud.deployer.spi.task.TaskLauncher}
+ *
+ * @return deployment properties
+ */
+ public Map getDeploymentProperties() {
+ return deploymentProperties;
}
@Override
@@ -82,7 +95,8 @@ public class TaskLaunchRequest implements Serializable{
return "TaskLaunchRequest{" +
"uri='" + uri + '\'' +
", commandlineArguments=" + commandlineArguments +
- ", properties=" + properties +
+ ", environmentProperties=" + environmentProperties +
+ ", deploymentProperties=" + deploymentProperties +
'}';
}
@@ -103,7 +117,11 @@ public class TaskLaunchRequest implements Serializable{
if (!(commandlineArguments != null ? commandlineArguments.equals(that.commandlineArguments) : that.commandlineArguments == null)){
return false;
}
- return properties != null ? properties.equals(that.properties) : that.properties == null;
+ if(!(deploymentProperties != null ? deploymentProperties.equals(that.deploymentProperties) : that.deploymentProperties == null))
+ {
+ return false;
+ }
+ return environmentProperties != null ? environmentProperties.equals(that.environmentProperties) : that.environmentProperties == null;
}
@@ -111,7 +129,8 @@ public class TaskLaunchRequest implements Serializable{
public int hashCode() {
int result = uri != null ? uri.hashCode() : 0;
result = 31 * result + (commandlineArguments != null ? commandlineArguments.hashCode() : 0);
- result = 31 * result + (properties != null ? properties.hashCode() : 0);
+ result = 31 * result + (environmentProperties != null ? environmentProperties.hashCode() : 0);
+ result = 31 * result + (deploymentProperties != null ? deploymentProperties.hashCode() : 0);
return result;
}
}
diff --git a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/launcher/TaskLauncherConfiguration.java b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/launcher/TaskLauncherConfiguration.java
index 350fc8c2..aa9a0eb4 100644
--- a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/launcher/TaskLauncherConfiguration.java
+++ b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/launcher/TaskLauncherConfiguration.java
@@ -16,21 +16,13 @@
package org.springframework.cloud.task.launcher;
-import java.util.HashMap;
-import java.util.Map;
-
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.cloud.deployer.resource.maven.MavenProperties;
-import org.springframework.cloud.deployer.resource.maven.MavenResourceLoader;
-import org.springframework.cloud.deployer.resource.support.DelegatingResourceLoader;
import org.springframework.cloud.deployer.spi.local.LocalDeployerProperties;
import org.springframework.cloud.deployer.spi.local.LocalTaskLauncher;
import org.springframework.cloud.deployer.spi.task.TaskLauncher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.ResourceLoader;
/**
* Creates the appropriate Task Launcher Configuration based on the TaskLauncher
@@ -51,26 +43,4 @@ public class TaskLauncherConfiguration {
return new LocalTaskLauncher(new LocalDeployerProperties());
}
}
-
- @Bean
- public MavenResourceLoader mavenResourceLoader(MavenProperties properties) {
- return new MavenResourceLoader(properties);
- }
-
- @Bean
- @ConditionalOnMissingBean(DelegatingResourceLoader.class)
- public DelegatingResourceLoader delegatingResourceLoader(MavenResourceLoader mavenResourceLoader) {
- Map loaders = new HashMap<>();
- loaders.put("maven", mavenResourceLoader);
- return new DelegatingResourceLoader(loaders);
- }
-
- @Bean
- public MavenProperties mavenProperties() {
- return new MavenConfigurationProperties();
- }
-
- @ConfigurationProperties(prefix = "maven")
- static class MavenConfigurationProperties extends MavenProperties {
- }
}
diff --git a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/launcher/TaskLauncherSink.java b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/launcher/TaskLauncherSink.java
index 6a097eaa..65ecc87e 100644
--- a/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/launcher/TaskLauncherSink.java
+++ b/spring-cloud-task-stream/src/main/java/org/springframework/cloud/task/launcher/TaskLauncherSink.java
@@ -61,8 +61,8 @@ public class TaskLauncherSink {
Assert.notNull(taskLauncher, "TaskLauncher has not been initialized");
logger.info("Launching Task for the following resource " + taskLaunchRequest);
Resource resource = delegatingResourceLoader.getResource(taskLaunchRequest.getUri());
- AppDefinition definition = new AppDefinition("Task-" + taskLaunchRequest.hashCode(), taskLaunchRequest.getProperties());
- AppDeploymentRequest request = new AppDeploymentRequest(definition, resource, null, taskLaunchRequest.getCommandlineArguments());
+ AppDefinition definition = new AppDefinition("Task-" + taskLaunchRequest.hashCode(), taskLaunchRequest.getEnvironmentProperties());
+ AppDeploymentRequest request = new AppDeploymentRequest(definition, resource, taskLaunchRequest.getDeploymentProperties(), taskLaunchRequest.getCommandlineArguments());
taskLauncher.launch(request);
}
diff --git a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/launcher/TaskLauncherSinkTests.java b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/launcher/TaskLauncherSinkTests.java
index 804b6d04..2ea7f6eb 100644
--- a/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/launcher/TaskLauncherSinkTests.java
+++ b/spring-cloud-task-stream/src/test/java/org/springframework/cloud/task/launcher/TaskLauncherSinkTests.java
@@ -102,7 +102,7 @@ public class TaskLauncherSinkTests {
public void testNoTaskLauncher() {
TaskLauncherSink sink = new TaskLauncherSink();
sink.taskLauncherSink(new TaskLaunchRequest("maven://org.springframework.cloud.task.app:"
- + "timestamp-task:jar:1.0.0.BUILD-SNAPSHOT",null, properties));
+ + "timestamp-task:jar:1.0.0.BUILD-SNAPSHOT",null, properties, null));
}
private TaskConfiguration.TestTaskLauncher launchTask(List commandLineArgs) {
@@ -110,7 +110,7 @@ public class TaskLauncherSinkTests {
context.getBean(TaskConfiguration.TestTaskLauncher.class);
TaskLaunchRequest request = new TaskLaunchRequest("maven://org.springframework.cloud.task.app:"
- + "timestamp-task:jar:1.0.0.BUILD-SNAPSHOT",commandLineArgs, properties);
+ + "timestamp-task:jar:1.0.0.BUILD-SNAPSHOT",commandLineArgs, properties, null);
GenericMessage message = new GenericMessage<>(request);
this.sink.input().send(message);
return testTaskLauncher;
diff --git a/spring-cloud-task-stream/src/test/resources/application.properties b/spring-cloud-task-stream/src/test/resources/application.properties
new file mode 100644
index 00000000..a2e7d812
--- /dev/null
+++ b/spring-cloud-task-stream/src/test/resources/application.properties
@@ -0,0 +1 @@
+maven.remoteRepositories.springRepo.url=https://repo.spring.io/libs-snapshot