From 95a462467e307dcf6cfb6e58bf225dbdacdb3f3b Mon Sep 17 00:00:00 2001 From: Semyon Fishman Date: Wed, 13 Feb 2019 11:40:25 -0500 Subject: [PATCH] GH-258, Avoid duplicate registration of functional bean Added logic in FunctionalSpringApplication to avoid registering the functional bean twice. This issue occured when executing in "hybrid" mode, and using the same bean as both the application context source and functional bean. --- .../function/context/FunctionalSpringApplication.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionalSpringApplication.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionalSpringApplication.java index 2ba28f465..0dd395aec 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionalSpringApplication.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/FunctionalSpringApplication.java @@ -16,6 +16,8 @@ package org.springframework.cloud.function.context; +import static java.util.Arrays.stream; + import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -24,6 +26,7 @@ import java.util.function.Function; import java.util.function.Supplier; import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.boot.WebApplicationType; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextInitializer; @@ -122,6 +125,13 @@ public class FunctionalSpringApplication () -> new FunctionRegistration<>( handler(generic, function, functionType)) .type(FunctionType.of(functionType))); + if (source.equals(functionType)) { + context.addBeanFactoryPostProcessor(beanFactory -> { + BeanDefinitionRegistry bdRegistry = (BeanDefinitionRegistry) beanFactory; + stream(beanFactory.getBeanNamesForType(functionType)) + .forEach(bdRegistry::removeBeanDefinition); + }); + } functional = true; } }