GH-265 Added support for injecting execution context
- Added support for injecting target execution context into the ApplicationContext in AbstractSpringFunctionAdapterInitializer, effectively making it available to all adapters (if one is provided) - Added test, docs Resolves #265
This commit is contained in:
@@ -42,7 +42,9 @@ import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.WebApplicationType;
|
||||
import org.springframework.cloud.function.context.catalog.FunctionInspector;
|
||||
import org.springframework.cloud.function.context.config.FunctionContextUtils;
|
||||
import org.springframework.context.ApplicationContextInitializer;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.support.GenericApplicationContext;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
/**
|
||||
@@ -57,6 +59,11 @@ public abstract class AbstractSpringFunctionAdapterInitializer<C> implements Clo
|
||||
|
||||
private static Log logger = LogFactory.getLog(AbstractSpringFunctionAdapterInitializer.class);
|
||||
|
||||
/**
|
||||
* Name of the bean for registering the target execution context passed to `initialize(context)` operation.
|
||||
*/
|
||||
public static final String TARGET_EXECUTION_CTX_BEAN_NAME = "targetExecutionContext";
|
||||
|
||||
private final Class<?> configurationClass;
|
||||
|
||||
private Function<Publisher<?>, Publisher<?>> function;
|
||||
@@ -102,6 +109,8 @@ public abstract class AbstractSpringFunctionAdapterInitializer<C> implements Clo
|
||||
}
|
||||
logger.info("Initializing: " + this.configurationClass);
|
||||
SpringApplication builder = springApplication();
|
||||
|
||||
this.registerTargetContext(targetContext, builder);
|
||||
ConfigurableApplicationContext context = builder.run();
|
||||
context.getAutowireCapableBeanFactory().autowireBean(this);
|
||||
this.context = context;
|
||||
@@ -113,6 +122,19 @@ public abstract class AbstractSpringFunctionAdapterInitializer<C> implements Clo
|
||||
}
|
||||
}
|
||||
|
||||
private void registerTargetContext(C targetContext, SpringApplication builder) {
|
||||
if (targetContext != null) {
|
||||
builder.addInitializers(new ApplicationContextInitializer<ConfigurableApplicationContext>() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void initialize(ConfigurableApplicationContext applicationContext) {
|
||||
((GenericApplicationContext) applicationContext).registerBean(TARGET_EXECUTION_CTX_BEAN_NAME,
|
||||
(Class<C>) targetContext.getClass(), (Supplier<C>) () -> targetContext);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
protected FunctionInspector getInspector() {
|
||||
return inspector;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user