From 56b9be9b6eb92f04ea558505e014c15861426625 Mon Sep 17 00:00:00 2001 From: markfisher Date: Wed, 17 May 2017 22:35:10 -0400 Subject: [PATCH] add task sample --- spring-cloud-function-samples/pom.xml | 1 + .../spring-cloud-function-sample-task/.jdk8 | 0 .../spring-cloud-function-sample-task/pom.xml | 125 ++++++++++++++++++ .../java/com/example/SampleApplication.java | 28 ++++ .../src/main/resources/application.yml | 18 +++ .../function/task/TaskConfiguration.java | 50 +------ ....java => TaskConfigurationProperties.java} | 4 +- 7 files changed, 181 insertions(+), 45 deletions(-) create mode 100644 spring-cloud-function-samples/spring-cloud-function-sample-task/.jdk8 create mode 100644 spring-cloud-function-samples/spring-cloud-function-sample-task/pom.xml create mode 100644 spring-cloud-function-samples/spring-cloud-function-sample-task/src/main/java/com/example/SampleApplication.java create mode 100644 spring-cloud-function-samples/spring-cloud-function-sample-task/src/main/resources/application.yml rename spring-cloud-function-task/src/main/java/org/springframework/cloud/function/task/{LambdaConfigurationProperties.java => TaskConfigurationProperties.java} (92%) diff --git a/spring-cloud-function-samples/pom.xml b/spring-cloud-function-samples/pom.xml index bc2c70251..84a6c2868 100644 --- a/spring-cloud-function-samples/pom.xml +++ b/spring-cloud-function-samples/pom.xml @@ -16,6 +16,7 @@ spring-cloud-function-sample spring-cloud-function-sample-pojo spring-cloud-function-sample-compiler + spring-cloud-function-sample-task diff --git a/spring-cloud-function-samples/spring-cloud-function-sample-task/.jdk8 b/spring-cloud-function-samples/spring-cloud-function-sample-task/.jdk8 new file mode 100644 index 000000000..e69de29bb diff --git a/spring-cloud-function-samples/spring-cloud-function-sample-task/pom.xml b/spring-cloud-function-samples/spring-cloud-function-sample-task/pom.xml new file mode 100644 index 000000000..f3a9a8d64 --- /dev/null +++ b/spring-cloud-function-samples/spring-cloud-function-sample-task/pom.xml @@ -0,0 +1,125 @@ + + + 4.0.0 + + com.example + function-sample-task + 1.0.0.BUILD-SNAPSHOT + jar + spring-cloud-function-sample-task + Spring Cloud Function Task Support + + + org.springframework.boot + spring-boot-starter-parent + 1.5.1.RELEASE + + + + + 1.8 + 1.0.0.BUILD-SNAPSHOT + 1.0.1.RELEASE + 3.0.6.RELEASE + + + + + org.springframework.cloud + spring-cloud-function-task + ${spring-cloud-function.version} + + + org.springframework.cloud + spring-cloud-function-context + ${spring-cloud-function.version} + + + org.springframework.cloud + spring-cloud-function-compiler + ${spring-cloud-function.version} + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.springframework.boot.experimental + spring-boot-thin-layout + ${wrapper.version} + + + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/libs-snapshot-local + + true + + + false + + + + spring-milestones + Spring Milestones + https://repo.spring.io/libs-milestone-local + + false + + + + spring-releases + Spring Releases + https://repo.spring.io/release + + false + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/libs-snapshot-local + + true + + + false + + + + spring-milestones + Spring Milestones + https://repo.spring.io/libs-milestone-local + + false + + + + spring-releases + Spring Releases + https://repo.spring.io/libs-release-local + + false + + + + + diff --git a/spring-cloud-function-samples/spring-cloud-function-sample-task/src/main/java/com/example/SampleApplication.java b/spring-cloud-function-samples/spring-cloud-function-sample-task/src/main/java/com/example/SampleApplication.java new file mode 100644 index 000000000..ce9fe95ff --- /dev/null +++ b/spring-cloud-function-samples/spring-cloud-function-sample-task/src/main/java/com/example/SampleApplication.java @@ -0,0 +1,28 @@ +/* + * Copyright 2017 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 com.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SampleApplication { + + public static void main(String[] args) throws Exception { + SpringApplication.run(SampleApplication.class, args); + } +} diff --git a/spring-cloud-function-samples/spring-cloud-function-sample-task/src/main/resources/application.yml b/spring-cloud-function-samples/spring-cloud-function-sample-task/src/main/resources/application.yml new file mode 100644 index 000000000..6f6bf27b0 --- /dev/null +++ b/spring-cloud-function-samples/spring-cloud-function-sample-task/src/main/resources/application.yml @@ -0,0 +1,18 @@ +spring: + cloud: + function: + task: + supplier: words + function: uppercase + consumer: print + compile: + words: + type: supplier + lambda: ()->Flux.just("hello","world") + uppercase: + lambda: s->s.toUpperCase() + inputType: String + outputType: String + print: + type: consumer + lambda: System.out::println diff --git a/spring-cloud-function-task/src/main/java/org/springframework/cloud/function/task/TaskConfiguration.java b/spring-cloud-function-task/src/main/java/org/springframework/cloud/function/task/TaskConfiguration.java index 3acea987a..1ec7db59b 100644 --- a/spring-cloud-function-task/src/main/java/org/springframework/cloud/function/task/TaskConfiguration.java +++ b/spring-cloud-function-task/src/main/java/org/springframework/cloud/function/task/TaskConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 the original author or authors. + * Copyright 2016-2017 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. @@ -16,8 +16,6 @@ package org.springframework.cloud.function.task; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; @@ -38,62 +36,28 @@ import reactor.core.publisher.Flux; */ @Configuration @EnableTask -@EnableConfigurationProperties(LambdaConfigurationProperties.class) +@EnableConfigurationProperties(TaskConfigurationProperties.class) @ConditionalOnClass({ EnableTask.class }) public class TaskConfiguration { @Autowired - private LambdaConfigurationProperties properties; + private TaskConfigurationProperties properties; @Bean public CommandLineRunner commandLineRunner(FunctionCatalog registry) { final Supplier> supplier = registry .lookupSupplier(properties.getSupplier()); - String functionName = properties.getFunction(); - Function, Flux> function = registry - .lookupFunction(functionName); - final Consumer consumer = registry + final Function, Flux> function = registry + .lookupFunction(properties.getFunction()); + final Consumer> consumer = registry .lookupConsumer(properties.getConsumer()); - final CountDownLatch latch = new CountDownLatch(1); - final AtomicBoolean status = new AtomicBoolean(); CommandLineRunner runner = new CommandLineRunner() { @Override public void run(String... args) throws Exception { - function.apply(supplier.get()).subscribe(consumer, - new CompletionConsumer(latch, status, false), - new CompletionConsumer(latch, status, true)); - latch.await(); + consumer.accept(function.apply(supplier.get())); } }; return runner; } - - private static class CompletionConsumer implements Consumer, Runnable { - - private final CountDownLatch latch; - - private final AtomicBoolean status; - - private final boolean value; - - private CompletionConsumer(CountDownLatch latch, AtomicBoolean status, - boolean value) { - this.latch = latch; - this.status = status; - this.value = value; - } - - @Override - public void accept(Throwable t) { - System.err.println("task failed: " + t); - this.run(); - } - - @Override - public void run() { - this.status.set(this.value); - this.latch.countDown(); - } - } } diff --git a/spring-cloud-function-task/src/main/java/org/springframework/cloud/function/task/LambdaConfigurationProperties.java b/spring-cloud-function-task/src/main/java/org/springframework/cloud/function/task/TaskConfigurationProperties.java similarity index 92% rename from spring-cloud-function-task/src/main/java/org/springframework/cloud/function/task/LambdaConfigurationProperties.java rename to spring-cloud-function-task/src/main/java/org/springframework/cloud/function/task/TaskConfigurationProperties.java index 2286894a3..228dee402 100644 --- a/spring-cloud-function-task/src/main/java/org/springframework/cloud/function/task/LambdaConfigurationProperties.java +++ b/spring-cloud-function-task/src/main/java/org/springframework/cloud/function/task/TaskConfigurationProperties.java @@ -21,8 +21,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties; /** * @author Mark Fisher */ -@ConfigurationProperties(prefix = "lambda") -public class LambdaConfigurationProperties { +@ConfigurationProperties(prefix = "spring.cloud.function.task") +public class TaskConfigurationProperties { private String supplier;