From d0eb012371d9e1312f3c276961e944f6fff36d04 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Tue, 7 Aug 2018 14:58:34 +0100 Subject: [PATCH] Make Azure function initializer a bit more flexible --- .../azure/AzureSpringBootRequestHandler.java | 12 ++++++++++++ .../azure/AzureSpringFunctionInitializer.java | 14 ++++++++++---- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootRequestHandler.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootRequestHandler.java index e2cb052c3..5c9bbff29 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootRequestHandler.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootRequestHandler.java @@ -21,6 +21,7 @@ import java.util.Collection; import java.util.List; import com.microsoft.azure.functions.ExecutionContext; +import com.microsoft.azure.functions.OutputBinding; import org.reactivestreams.Publisher; @@ -50,6 +51,17 @@ public class AzureSpringBootRequestHandler extends AzureSpringFunctionInit return result(convertedEvent, output); } + public void handleOutput(I foo, OutputBinding bar, ExecutionContext context) { + if (context != null) { + context.getLogger().fine("Handler trigger processed a request."); + } + initialize(context); + + Object convertedEvent = convertEvent(foo); + Publisher output = apply(extract(convertedEvent)); + bar.setValue(result(convertedEvent, output)); + } + protected Object convertEvent(I input) { return input; } diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringFunctionInitializer.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringFunctionInitializer.java index 55d8c5dc0..b8517950a 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringFunctionInitializer.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringFunctionInitializer.java @@ -53,10 +53,11 @@ public class AzureSpringFunctionInitializer implements Closeable { @Autowired(required = false) private FunctionCatalog catalog; - private static ConfigurableApplicationContext context; + private volatile static ConfigurableApplicationContext context; public AzureSpringFunctionInitializer(Class configurationClass) { - this.configurationClass = configurationClass; + this.configurationClass = configurationClass == null ? getClass() + : configurationClass; } public AzureSpringFunctionInitializer() { @@ -108,8 +109,13 @@ public class AzureSpringFunctionInitializer implements Closeable { } else { Set functionNames = this.catalog.getNames(Function.class); - this.function = this.catalog.lookup(Function.class, - functionNames.iterator().next()); + if (functionNames.size() == 1) { + this.function = this.catalog.lookup(Function.class, + functionNames.iterator().next()); + } + else { + this.function = this.catalog.lookup(Function.class, name); + } } }