From 87f6013e22ab2ad026a5957d4c18f0835daca070 Mon Sep 17 00:00:00 2001 From: Soby Chacko Date: Wed, 21 Sep 2022 17:15:06 -0400 Subject: [PATCH] Conditional loading of AVRO message converter Introducing a property to disable loading the AVRO message converter. When spring.cloud.stream.avro.enabled is set to false, the converter is not loaded. By default, it is enabled. Resolves https://github.com/spring-cloud/spring-cloud-function/issues/854 --- .../config/ContextFunctionCatalogAutoConfiguration.java | 1 + ...onCatalogAutoConfigurationConditionalLoadingTests.java | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java index 1e38359e9..db60eac4a 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java @@ -166,6 +166,7 @@ public class ContextFunctionCatalogAutoConfiguration { @Configuration(proxyBeanMethods = false) @ConditionalOnClass(name = "org.apache.avro.Schema") + @ConditionalOnProperty(value = "spring.cloud.stream.avro.enabled", havingValue = "true", matchIfMissing = true) static class AvroSchemaMessageConverterConfiguration { @Bean diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationConditionalLoadingTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationConditionalLoadingTests.java index ab94f742c..ebfd022b1 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationConditionalLoadingTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationConditionalLoadingTests.java @@ -37,6 +37,7 @@ import static org.mockito.Mockito.mock; * Tests the conditional loading aspects of the {@link ContextFunctionCatalogAutoConfiguration}. * * @author Chris Bono + * @author Soby Chacko */ public class ContextFunctionCatalogAutoConfigurationConditionalLoadingTests { @@ -58,6 +59,13 @@ public class ContextFunctionCatalogAutoConfigurationConditionalLoadingTests { .hasSingleBean(AvroSchemaMessageConverter.class)); } + @Test + void avroSchemaMessageConverterBeansNotLoadedWhenAvroOnClasspathButDisabledThroughProperty() { + contextRunner.withPropertyValues("spring.cloud.stream.avro.enabled:false") + .run((context) -> assertThat(context).doesNotHaveBean(AvroSchemaServiceManager.class) + .doesNotHaveBean(AvroSchemaMessageConverter.class)); + } + @Test void avroSchemaMessageConverterBeansNotLoadedWhenAvroNotOnClasspath() { contextRunner.withClassLoader(new FilteredClassLoader(Schema.class)).run((context) ->