From b6c0578352abb677dd007ad35d33100dddc88a0a Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Fri, 21 Aug 2020 16:03:10 +0200 Subject: [PATCH] Clean up RSocketAutoConfiguration Clean up RSocketAutoConfiguration to better allign with Spring's idioms Upgraded to Kotlin 1.4.0 --- spring-cloud-function-kotlin/pom.xml | 3 +- .../rsocket/RSocketAutoConfiguration.java | 31 ++++++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/spring-cloud-function-kotlin/pom.xml b/spring-cloud-function-kotlin/pom.xml index c9df3846e..a3e540a59 100644 --- a/spring-cloud-function-kotlin/pom.xml +++ b/spring-cloud-function-kotlin/pom.xml @@ -41,7 +41,7 @@ kotlin-maven-plugin org.jetbrains.kotlin - 1.2.71 + 1.4.0 compile @@ -72,7 +72,6 @@ org.apache.maven.plugins maven-compiler-plugin - 3.5.1 diff --git a/spring-cloud-function-rsocket/src/main/java/org/springframework/cloud/function/rsocket/RSocketAutoConfiguration.java b/spring-cloud-function-rsocket/src/main/java/org/springframework/cloud/function/rsocket/RSocketAutoConfiguration.java index 74f3aef9d..45c031782 100644 --- a/spring-cloud-function-rsocket/src/main/java/org/springframework/cloud/function/rsocket/RSocketAutoConfiguration.java +++ b/spring-cloud-function-rsocket/src/main/java/org/springframework/cloud/function/rsocket/RSocketAutoConfiguration.java @@ -22,7 +22,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.BeansException; -import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.function.context.FunctionCatalog; @@ -33,6 +32,7 @@ import org.springframework.cloud.function.context.catalog.FunctionTypeUtils; import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry.FunctionInvocationWrapper; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.SmartLifecycle; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.GenericApplicationContext; @@ -53,15 +53,15 @@ public class RSocketAutoConfiguration { @Bean - public FunctionToDestinationBinder functionToDestinationBinder(FunctionCatalog functionCatalog, + public FunctionToRSocketBinder functionToDestinationBinder(FunctionCatalog functionCatalog, FunctionProperties functionProperties, RSocketFunctionProperties rSocketFunctionProperties) { - return new FunctionToDestinationBinder(functionCatalog, functionProperties, rSocketFunctionProperties); + return new FunctionToRSocketBinder(functionCatalog, functionProperties, rSocketFunctionProperties); } /** * */ - private static class FunctionToDestinationBinder implements InitializingBean, DisposableBean, ApplicationContextAware { + private static class FunctionToRSocketBinder implements InitializingBean, ApplicationContextAware, SmartLifecycle { private final FunctionCatalog functionCatalog; @@ -73,7 +73,9 @@ public class RSocketAutoConfiguration { private GenericApplicationContext context; - FunctionToDestinationBinder(FunctionCatalog functionCatalog, FunctionProperties functionProperties, + private boolean started; + + FunctionToRSocketBinder(FunctionCatalog functionCatalog, FunctionProperties functionProperties, RSocketFunctionProperties rSocketFunctionProperties) { this.functionCatalog = functionCatalog; this.functionProperties = functionProperties; @@ -99,10 +101,7 @@ public class RSocketAutoConfiguration { InetSocketAddress bindAddress = InetSocketAddress .createUnresolved(this.rSocketFunctionProperties.getBindAddress(), this.rSocketFunctionProperties.getBindPort()); - if (this.invocableFunction == null) { - this.invocableFunction = new RSocketListenerFunction(function, bindAddress); - this.invocableFunction.start(); - } + this.invocableFunction = new RSocketListenerFunction(function, bindAddress); } @SuppressWarnings({ "rawtypes", "unchecked" }) @@ -137,10 +136,20 @@ public class RSocketAutoConfiguration { } @Override - public void destroy() throws Exception { - if (this.invocableFunction != null) { + public void start() { + if (!this.isRunning() && this.invocableFunction != null) { + this.invocableFunction.start(); + } + } + @Override + public void stop() { + if (this.isRunning() && this.invocableFunction != null) { this.invocableFunction.stop(); } } + @Override + public boolean isRunning() { + return this.started; + } } }