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.
This commit is contained in:
John Blum
2020-05-19 16:55:28 -07:00
parent 22aaead3cb
commit 58122de507
3 changed files with 14 additions and 3 deletions

View File

@@ -20,6 +20,7 @@ import org.apache.geode.cache.GemFireCache;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.data.gemfire.CacheFactoryBean; import org.springframework.data.gemfire.CacheFactoryBean;
import org.springframework.data.gemfire.config.annotation.EnableLogging; 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.EnableAutoConfiguration
* @see org.springframework.boot.autoconfigure.condition.ConditionalOnBean * @see org.springframework.boot.autoconfigure.condition.ConditionalOnBean
* @see org.springframework.boot.autoconfigure.condition.ConditionalOnClass * @see org.springframework.boot.autoconfigure.condition.ConditionalOnClass
* @see org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
* @see org.springframework.context.annotation.Configuration * @see org.springframework.context.annotation.Configuration
* @see org.springframework.data.gemfire.CacheFactoryBean * @see org.springframework.data.gemfire.CacheFactoryBean
* @see org.springframework.data.gemfire.config.annotation.EnableLogging * @see org.springframework.data.gemfire.config.annotation.EnableLogging
@@ -39,8 +41,14 @@ import org.springframework.data.gemfire.config.annotation.EnableLogging;
@Configuration @Configuration
@ConditionalOnBean(GemFireCache.class) @ConditionalOnBean(GemFireCache.class)
@ConditionalOnClass(CacheFactoryBean.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 @EnableLogging
@SuppressWarnings("unused") @SuppressWarnings("unused")
// TODO Find a more reliable way to refer to the LoggingConfiguration Configurer beans defined above other than by name!
public class LoggingAutoConfiguration { public class LoggingAutoConfiguration {
} }

View File

@@ -52,7 +52,10 @@ import org.springframework.test.context.junit4.SpringRunner;
*/ */
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest( @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 webEnvironment = SpringBootTest.WebEnvironment.NONE
) )
@SuppressWarnings("unused") @SuppressWarnings("unused")
@@ -84,7 +87,7 @@ public class LoggingManualConfigurationIntegrationTests extends IntegrationTests
@SpringBootApplication @SpringBootApplication
@EnableGemFireMockObjects @EnableGemFireMockObjects
@EnableLogging(logLevel = "warn") @EnableLogging
@UseMemberName("LoggingManualConfigurationIntegrationTests") @UseMemberName("LoggingManualConfigurationIntegrationTests")
static class TestConfigurationOne { } static class TestConfigurationOne { }

View File

@@ -3,5 +3,5 @@
spring.boot.data.gemfire.cache.data.import.active-profiles=IMPORT spring.boot.data.gemfire.cache.data.import.active-profiles=IMPORT
spring.boot.data.gemfire.security.ssl.keystore.name=non-existing-trusted.keystore spring.boot.data.gemfire.security.ssl.keystore.name=non-existing-trusted.keystore
spring.data.gemfire.logging.level=error 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 spring.main.allow-bean-definition-overriding=true