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.
This commit is contained in:
Semyon Fishman
2019-02-13 11:40:25 -05:00
parent c797e4fed4
commit 95a462467e

View File

@@ -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;
}
}