From 10f446d6b522aa83fbbae88a11c0c3278434ddb4 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 12 Nov 2018 11:07:36 +0000 Subject: [PATCH] Ensure ContextRunner can be used to run a non-functional application --- .../function/deployer/ContextRunner.java | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/ContextRunner.java b/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/ContextRunner.java index 86b9d82ab..e6cb946c0 100644 --- a/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/ContextRunner.java +++ b/spring-cloud-function-deployer/src/main/java/org/springframework/cloud/function/deployer/ContextRunner.java @@ -24,6 +24,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.cloud.function.context.FunctionalSpringApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.MapPropertySource; +import org.springframework.core.env.SimpleCommandLinePropertySource; import org.springframework.core.env.StandardEnvironment; import org.springframework.util.ClassUtils; import org.springframework.util.ReflectionUtils; @@ -54,11 +55,13 @@ public class ContextRunner { environment.getPropertySources().addAfter( StandardEnvironment.SYSTEM_ENVIRONMENT_PROPERTY_SOURCE_NAME, new MapPropertySource("appDeployer", properties)); + if (args != null && args.length > 0) { + environment.getPropertySources().addFirst( + new SimpleCommandLinePropertySource("args", args)); + } running = true; Class sourceClass = ClassUtils.resolveClassName(source, null); - SpringApplication builder = builder(sourceClass); - builder.setEnvironment(environment); - builder.setRegisterShutdownHook(false); + SpringApplication builder = builder(sourceClass, environment); context = builder.run(args); } catch (Throwable ex) { @@ -118,9 +121,27 @@ public class ContextRunner { return this.error; } - private static SpringApplication builder(Class type) { - SpringApplication application = new FunctionalSpringApplication(type); + private static SpringApplication builder(Class type, + StandardEnvironment environment) { + SpringApplication application; + if (!isFunctional(environment)) { + application = new SpringApplication(type); + } + else { + application = new FunctionalSpringApplication(type); + } + application.setEnvironment(environment); + application.setRegisterShutdownHook(false); return application; } + private static boolean isFunctional(StandardEnvironment environment) { + if (!ClassUtils.isPresent( + "org.springframework.cloud.function.context.FunctionalSpringApplication", + null)) { + return false; + } + return environment.resolvePlaceholders("${spring.functional.enabled:true}") + .equals("true"); + } }