From eb48314ceac87ddf43116215c7c5201637982076 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Thu, 4 Dec 2014 19:37:52 -0700 Subject: [PATCH] added failFast option fixes gh-1 --- .../PropertySourceBootstrapConfiguration.java | 11 ++++++--- .../config/client/ConfigClientProperties.java | 13 +++++++++- .../java/sample/ApplicationFailFastTests.java | 24 +++++++++++++++++++ ...EnvironmentRepositoryIntegrationTests.java | 8 ++++--- 4 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 spring-cloud-config-sample/src/test/java/sample/ApplicationFailFastTests.java diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/bootstrap/config/PropertySourceBootstrapConfiguration.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/bootstrap/config/PropertySourceBootstrapConfiguration.java index 67c2d65b..faae9693 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/bootstrap/config/PropertySourceBootstrapConfiguration.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/bootstrap/config/PropertySourceBootstrapConfiguration.java @@ -57,12 +57,14 @@ public class PropertySourceBootstrapConfiguration implements .getLog(PropertySourceBootstrapConfiguration.class); @Autowired(required = false) - private List propertySourceLocators = new ArrayList(); + private List propertySourceLocators = new ArrayList<>(); + + @Autowired + private ConfigClientProperties configClientProperties; public void setPropertySourceLocators( Collection propertySourceLocators) { - this.propertySourceLocators = new ArrayList( - propertySourceLocators); + this.propertySourceLocators = new ArrayList<>(propertySourceLocators); } @Override @@ -77,6 +79,9 @@ public class PropertySourceBootstrapConfiguration implements source = locator.locate(applicationContext.getEnvironment()); } catch (Exception e) { + if (configClientProperties.isFailFast()) { + throw new IllegalStateException("Could not locate PropertySource. The fail fast property is set, failing", e); + } logger.error("Could not locate PropertySource: " + e.getMessage()); } if (source == null) { diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientProperties.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientProperties.java index 88927360..b1f0853e 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientProperties.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/config/client/ConfigClientProperties.java @@ -52,6 +52,8 @@ public class ConfigClientProperties { private Discovery discovery = new Discovery(); + private boolean failFast = false; + private ConfigClientProperties() { } @@ -127,6 +129,14 @@ public class ConfigClientProperties { this.discovery = discovery; } + public boolean isFailFast() { + return failFast; + } + + public void setFailFast(boolean failFast) { + this.failFast = failFast; + } + private String[] extractCredentials() { String[] result = new String[3]; String uri = this.uri; @@ -216,7 +226,8 @@ public class ConfigClientProperties { @Override public String toString() { return "ConfigClientProperties [name=" + name + ", env=" + env + ", label=" - + label + ", uri=" + uri + ", discovery.enabled=" + discovery.enabled + "]"; + + label + ", uri=" + uri + ", discovery.enabled=" + discovery.enabled + + ", failFast="+ failFast + "]"; } } diff --git a/spring-cloud-config-sample/src/test/java/sample/ApplicationFailFastTests.java b/spring-cloud-config-sample/src/test/java/sample/ApplicationFailFastTests.java new file mode 100644 index 00000000..a3e7713f --- /dev/null +++ b/spring-cloud-config-sample/src/test/java/sample/ApplicationFailFastTests.java @@ -0,0 +1,24 @@ +package sample; + +import org.junit.Test; +import org.springframework.boot.builder.SpringApplicationBuilder; + +import static org.junit.Assert.*; + +public class ApplicationFailFastTests { + + @Test + public void contextLoads() { + try { + new SpringApplicationBuilder() + .sources(Application.class) + .run("--server.port=0", + "--spring.cloud.config.failFast=true", + "--spring.cloud.config.uit=http://server-host-doesnt-exist:1234"); + fail("failFast option did not produce an exception"); + } catch (Exception e) { + assertTrue("Exception not caused by fail fast", e.getMessage().contains("fail fast")); + } + } + +} diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/JGitEnvironmentRepositoryIntegrationTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/JGitEnvironmentRepositoryIntegrationTests.java index 036628d6..de0dbbea 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/JGitEnvironmentRepositoryIntegrationTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/JGitEnvironmentRepositoryIntegrationTests.java @@ -60,7 +60,8 @@ public class JGitEnvironmentRepositoryIntegrationTests { public void vanilla() throws IOException { String uri = ConfigServerTestUtils.prepareLocalRepo(); context = new SpringApplicationBuilder(TestConfiguration.class).web(false) - .properties("spring.cloud.config.server.git.uri=" + uri).run(); + //TODO: why didn't .properties() work for me? + .run("--spring.cloud.config.server.git.uri=" + uri); EnvironmentRepository repository = context.getBean(EnvironmentRepository.class); repository.findOne("bar", "staging", "master"); Environment environment = repository.findOne("bar", "staging", "master"); @@ -72,8 +73,9 @@ public class JGitEnvironmentRepositoryIntegrationTests { String uri = ConfigServerTestUtils.prepareLocalRepo("another-config-repo"); context = new SpringApplicationBuilder(TestConfiguration.class) .web(false) - .properties("spring.cloud.config.server.git.uri=" + uri, - "spring.cloud.config.server.git.searchPaths=sub").run(); + //TODO: why didn't .properties() work for me? + .run("--spring.cloud.config.server.git.uri=" + uri, + "--spring.cloud.config.server.git.searchPaths=sub"); EnvironmentRepository repository = context.getBean(EnvironmentRepository.class); repository.findOne("bar", "staging", "master"); Environment environment = repository.findOne("bar", "staging", "master");