GH-425 Fix Azure function reinitialization

Fixed Azure function reinitialization on each request

Resolves #425
This commit is contained in:
Oleg Zhurakousky
2019-12-16 19:47:46 +01:00
parent 52b0fdea50
commit 7e0e8ff7ee

View File

@@ -36,6 +36,10 @@ import org.springframework.cloud.function.context.AbstractSpringFunctionAdapterI
*/ */
public class AzureSpringBootRequestHandler<I, O> extends AbstractSpringFunctionAdapterInitializer<ExecutionContext> { public class AzureSpringBootRequestHandler<I, O> extends AbstractSpringFunctionAdapterInitializer<ExecutionContext> {
private static boolean initialized;
private static AzureSpringBootRequestHandler thisInitializer;
public AzureSpringBootRequestHandler(Class<?> configurationClass) { public AzureSpringBootRequestHandler(Class<?> configurationClass) {
super(configurationClass); super(configurationClass);
} }
@@ -48,6 +52,12 @@ public class AzureSpringBootRequestHandler<I, O> extends AbstractSpringFunctionA
return this.handleRequest(null, context); return this.handleRequest(null, context);
} }
@Override
public void close() {
initialized = false;
super.close();
}
public O handleRequest(I input, ExecutionContext context) { public O handleRequest(I input, ExecutionContext context) {
String name = null; String name = null;
try { try {
@@ -55,11 +65,16 @@ public class AzureSpringBootRequestHandler<I, O> extends AbstractSpringFunctionA
name = context.getFunctionName(); name = context.getFunctionName();
context.getLogger().info("Handler processing a request for: " + name); context.getLogger().info("Handler processing a request for: " + name);
} }
initialize(context); if (!initialized) {
initialize(context);
initialized = true;
thisInitializer = this;
}
Publisher<?> events = input == null ? Mono.empty() : extract(convertEvent(input)); Publisher<?> events = input == null ? Mono.empty() : extract(convertEvent(input));
Publisher<?> output = apply(events); Publisher<?> output = thisInitializer.apply(events);
return result(input, output); return result(input, output);
} }
catch (Throwable ex) { catch (Throwable ex) {