From 58122de507a777bbca69aebcffb75ecc9a951e28 Mon Sep 17 00:00:00 2001 From: John Blum Date: Tue, 19 May 2020 16:55:28 -0700 Subject: [PATCH] Annotate LoggingAutoConfiguration with @ConditionalOnMissingBean to disable auto-configuration when a user has explicitly declared GemFire/Geode logging configuration. As user explicitly declares GemFire/Geode logging configuration when s/he annotates his/her main Spring Boot application class or an application specific @Configuration class picked up by Spring Boot with SDG's @EnableLogging annotation. Resolves gh-85. --- .../boot/autoconfigure/LoggingAutoConfiguration.java | 8 ++++++++ .../LoggingManualConfigurationIntegrationTests.java | 7 +++++-- .../src/test/resources/application.properties | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/LoggingAutoConfiguration.java b/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/LoggingAutoConfiguration.java index 28156032..c0c02313 100644 --- a/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/LoggingAutoConfiguration.java +++ b/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/LoggingAutoConfiguration.java @@ -20,6 +20,7 @@ import org.apache.geode.cache.GemFireCache; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Configuration; import org.springframework.data.gemfire.CacheFactoryBean; import org.springframework.data.gemfire.config.annotation.EnableLogging; @@ -31,6 +32,7 @@ import org.springframework.data.gemfire.config.annotation.EnableLogging; * @see org.springframework.boot.autoconfigure.EnableAutoConfiguration * @see org.springframework.boot.autoconfigure.condition.ConditionalOnBean * @see org.springframework.boot.autoconfigure.condition.ConditionalOnClass + * @see org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean * @see org.springframework.context.annotation.Configuration * @see org.springframework.data.gemfire.CacheFactoryBean * @see org.springframework.data.gemfire.config.annotation.EnableLogging @@ -39,8 +41,14 @@ import org.springframework.data.gemfire.config.annotation.EnableLogging; @Configuration @ConditionalOnBean(GemFireCache.class) @ConditionalOnClass(CacheFactoryBean.class) +@ConditionalOnMissingBean(name = { + "org.springframework.data.gemfire.config.annotation.LoggingConfiguration.ClientGemFirePropertiesConfigurer", + "org.springframework.data.gemfire.config.annotation.LoggingConfiguration.LocatorGemFirePropertiesConfigurer", + "org.springframework.data.gemfire.config.annotation.LoggingConfiguration.PeerGemFirePropertiesConfigurer", +}) @EnableLogging @SuppressWarnings("unused") +// TODO Find a more reliable way to refer to the LoggingConfiguration Configurer beans defined above other than by name! public class LoggingAutoConfiguration { } diff --git a/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/logging/LoggingManualConfigurationIntegrationTests.java b/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/logging/LoggingManualConfigurationIntegrationTests.java index 496879dd..00917f93 100644 --- a/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/logging/LoggingManualConfigurationIntegrationTests.java +++ b/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/logging/LoggingManualConfigurationIntegrationTests.java @@ -52,7 +52,10 @@ import org.springframework.test.context.junit4.SpringRunner; */ @RunWith(SpringRunner.class) @SpringBootTest( - properties = { "spring.main.allow-bean-definition-overriding=false" }, + properties = { + "spring.data.gemfire.logging.level=warn", + "spring.main.allow-bean-definition-overriding=false" + }, webEnvironment = SpringBootTest.WebEnvironment.NONE ) @SuppressWarnings("unused") @@ -84,7 +87,7 @@ public class LoggingManualConfigurationIntegrationTests extends IntegrationTests @SpringBootApplication @EnableGemFireMockObjects - @EnableLogging(logLevel = "warn") + @EnableLogging @UseMemberName("LoggingManualConfigurationIntegrationTests") static class TestConfigurationOne { } diff --git a/spring-geode-autoconfigure/src/test/resources/application.properties b/spring-geode-autoconfigure/src/test/resources/application.properties index 9f25bd22..ad647eb5 100644 --- a/spring-geode-autoconfigure/src/test/resources/application.properties +++ b/spring-geode-autoconfigure/src/test/resources/application.properties @@ -3,5 +3,5 @@ spring.boot.data.gemfire.cache.data.import.active-profiles=IMPORT spring.boot.data.gemfire.security.ssl.keystore.name=non-existing-trusted.keystore spring.data.gemfire.logging.level=error -spring.data.gemfire.cache.log-level=${spring.data.gemfire.logging.level} +spring.data.gemfire.cache.log-level=${spring.data.gemfire.logging.level:off} spring.main.allow-bean-definition-overriding=true