diff --git a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigBootstrapConfiguration.java b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigBootstrapConfiguration.java index 6a10242b..d0a348b4 100644 --- a/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigBootstrapConfiguration.java +++ b/spring-cloud-consul-config/src/main/java/org/springframework/cloud/consul/config/ConsulConfigBootstrapConfiguration.java @@ -20,6 +20,7 @@ import com.ecwid.consul.v1.ConsulClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.consul.ConditionalOnConsulEnabled; import org.springframework.cloud.consul.ConsulAutoConfiguration; @@ -29,6 +30,7 @@ import org.springframework.context.annotation.Import; /** * @author Spencer Gibb + * @author Edvin Eriksson */ @Configuration @ConditionalOnConsulEnabled @@ -43,6 +45,7 @@ public class ConsulConfigBootstrapConfiguration { private ConsulClient consul; @Bean + @ConditionalOnMissingBean public ConsulConfigProperties consulConfigProperties() { return new ConsulConfigProperties(); } diff --git a/spring-cloud-consul-config/src/test/java/org/springframework/cloud/consul/config/ConsulConfigBootstrapConfigurationTests.java b/spring-cloud-consul-config/src/test/java/org/springframework/cloud/consul/config/ConsulConfigBootstrapConfigurationTests.java new file mode 100644 index 00000000..783ebdaf --- /dev/null +++ b/spring-cloud-consul-config/src/test/java/org/springframework/cloud/consul/config/ConsulConfigBootstrapConfigurationTests.java @@ -0,0 +1,55 @@ +package org.springframework.cloud.consul.config; + +import org.junit.Assert; +import org.junit.Test; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.context.annotation.Bean; + +/** + * @author Edvin Eriksson + */ +public class ConsulConfigBootstrapConfigurationTests { + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner(); + + /** + * Tests that the auto-config bean backs off if a user provided their own + */ + @Test + public void testConfigPropsBeanBacksOff() { + contextRunner + .withUserConfiguration(TestConfig.class) + .withUserConfiguration(ConsulConfigBootstrapConfiguration.class) + .run(context -> { + ConsulConfigProperties config = context.getBean(ConsulConfigProperties.class); + Assert.assertEquals("Prefix did not match", "platform-config", config.getPrefix()); + Assert.assertEquals("Default context did not match", "defaults", config.getDefaultContext()); + }); + } + + /** + * Tests that the auto-config bean kicks in if the user did not provide any custom bean. + */ + @Test + public void testConfigPropsBeanKicksIn() { + contextRunner + .withUserConfiguration(ConsulConfigBootstrapConfiguration.class) + .run(context -> { + ConsulConfigProperties config = context.getBean(ConsulConfigProperties.class); + Assert.assertEquals("Prefix did not match", "config", config.getPrefix()); + Assert.assertEquals("Default context did not match", "application", config.getDefaultContext()); + }); + } +} + +/** + * Test config that simulates a "user provided bean" + */ +class TestConfig { + @Bean + public ConsulConfigProperties consulConfigProperties() { + ConsulConfigProperties config = new ConsulConfigProperties(); + config.setPrefix("platform-config"); + config.setDefaultContext("defaults"); + return config; + } +} \ No newline at end of file