GH-1823 Make FunctionConfiguration conditional

Resolves #1823
This commit is contained in:
Oleg Zhurakousky
2019-10-17 20:33:36 +02:00
parent 8b7e76c3b0
commit ad64df05a1
2 changed files with 36 additions and 3 deletions

View File

@@ -43,11 +43,13 @@ import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.function.context.FunctionCatalog;
import org.springframework.cloud.function.context.FunctionProperties;
import org.springframework.cloud.function.context.FunctionRegistry;
import org.springframework.cloud.function.context.PollableBean;
import org.springframework.cloud.function.context.catalog.BeanFactoryAwareFunctionRegistry.FunctionInvocationWrapper;
import org.springframework.cloud.function.context.catalog.FunctionInspector;
@@ -105,9 +107,10 @@ import org.springframework.util.StringUtils;
*/
@Configuration
@EnableConfigurationProperties(StreamFunctionProperties.class)
@AutoConfigureBefore(BindingServiceConfiguration.class)
@Import({ BindingBeansRegistrar.class, BinderFactoryAutoConfiguration.class })
@ConditionalOnClass(ContextFunctionCatalogAutoConfiguration.class)
@AutoConfigureBefore(BindingServiceConfiguration.class)
@AutoConfigureAfter(ContextFunctionCatalogAutoConfiguration.class)
@ConditionalOnBean(FunctionRegistry.class)
public class FunctionConfiguration {
@Bean

View File

@@ -28,6 +28,7 @@ import reactor.core.publisher.Flux;
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.function.context.config.ContextFunctionCatalogAutoConfiguration;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.binder.test.InputDestination;
@@ -332,6 +333,26 @@ public class ImplicitFunctionBindingTests {
}
}
@Test
public void testNoFunctionEnabledConfiguration() {
System.clearProperty("spring.cloud.stream.function.definition");
try (ConfigurableApplicationContext context = new SpringApplicationBuilder(
TestChannelBinderConfiguration.getCompleteConfiguration(NoFunctionEnabledConfiguration.class))
.web(WebApplicationType.NONE).run("--spring.jmx.enabled=false")) {
try {
context.getBean(FunctionConfiguration.class);
fail();
}
catch (Exception e) {
// ignore
}
}
}
@EnableAutoConfiguration
public static class NoEnableBindingConfiguration {
@@ -447,4 +468,13 @@ public class ImplicitFunctionBindingTests {
}
}
@EnableAutoConfiguration(exclude = ContextFunctionCatalogAutoConfiguration.class)
public static class NoFunctionEnabledConfiguration {
@Bean
public Supplier<String> supplier() {
return () -> "hello";
}
}
}