From 939f5a8b1a153a79b252557ad18e7501f77921ac Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Tue, 9 Jan 2018 13:01:24 +0000 Subject: [PATCH] Reflection hack to provide Spring Boot 2.0 compatibility --- .../adapter/aws/SpringFunctionInitializer.java | 17 +++++++++++++++-- .../function-sample-aws/pom.xml | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringFunctionInitializer.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringFunctionInitializer.java index 9227535eb..70ddc65be 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringFunctionInitializer.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringFunctionInitializer.java @@ -30,6 +30,7 @@ import java.util.jar.Manifest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.cloud.function.context.catalog.FunctionInspector; @@ -85,8 +86,7 @@ public class SpringFunctionInitializer implements Closeable { return; } logger.info("Initializing: " + configurationClass); - SpringApplicationBuilder builder = new SpringApplicationBuilder( - configurationClass); + SpringApplicationBuilder builder = springApplication(); ConfigurableApplicationContext context = builder.web(false).run(); context.getAutowireCapableBeanFactory().autowireBean(this); String name = context.getEnvironment().getProperty("function.name"); @@ -116,6 +116,19 @@ public class SpringFunctionInitializer implements Closeable { this.context = context; } + private SpringApplicationBuilder springApplication() { + if (ClassUtils.hasConstructor(SpringApplicationBuilder.class, Object[].class)) { + SpringApplicationBuilder builder = new SpringApplicationBuilder( + configurationClass); + return builder; + } + // Forward compatibility with Spring Boot 2.0 via reflection + return BeanUtils.instantiateClass( + ClassUtils.getConstructorIfAvailable(SpringApplicationBuilder.class, + Class[].class), + new Object[] { new Class[] { configurationClass } }); + } + protected Class getInputType() { if (inspector != null) { return inspector.getInputType(function()); diff --git a/spring-cloud-function-samples/function-sample-aws/pom.xml b/spring-cloud-function-samples/function-sample-aws/pom.xml index 8e559348a..8d148a709 100644 --- a/spring-cloud-function-samples/function-sample-aws/pom.xml +++ b/spring-cloud-function-samples/function-sample-aws/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 1.5.3.RELEASE + 1.5.9.RELEASE