From 7a6b32fcd850e8e9f4a23ae4bb868eb1b25c7b8b Mon Sep 17 00:00:00 2001 From: Serge Khodorkovsky Date: Fri, 17 Jul 2020 08:24:37 -0400 Subject: [PATCH 1/3] Enable ignoring sql exceptions Primarily useful for composite repository configuration, the flag provides an ability to ignore database exceptions so that the system would be able to continue working with other repositories. Fixes gh-1653 --- .../JdbcEnvironmentProperties.java | 13 +++++++ .../JdbcEnvironmentRepository.java | 36 ++++++++++++++++--- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentProperties.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentProperties.java index 61e34459..b5782f1f 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentProperties.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentProperties.java @@ -40,6 +40,11 @@ public class JdbcEnvironmentProperties implements EnvironmentRepositoryPropertie /** SQL used to query database for keys and values. */ private String sql = DEFAULT_SQL; + /** + * Flag to determine how to handle query exceptions. + */ + private boolean failOnError = true; + public boolean isEnabled() { return enabled; } @@ -65,4 +70,12 @@ public class JdbcEnvironmentProperties implements EnvironmentRepositoryPropertie this.sql = sql; } + public boolean isFailOnError() { + return failOnError; + } + + public void setFailOnError(boolean failOnError) { + this.failOnError = failOnError; + } + } diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java index 2f5bd313..10fd7a98 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java @@ -27,6 +27,9 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.cloud.config.environment.Environment; import org.springframework.cloud.config.environment.PropertySource; import org.springframework.core.Ordered; @@ -50,6 +53,8 @@ import org.springframework.util.StringUtils; */ public class JdbcEnvironmentRepository implements EnvironmentRepository, Ordered { + private static Log logger = LogFactory.getLog(JdbcEnvironmentRepository.class); + private final JdbcTemplate jdbc; private final PropertiesResultSetExtractor extractor = new PropertiesResultSetExtractor(); @@ -58,11 +63,14 @@ public class JdbcEnvironmentRepository implements EnvironmentRepository, Ordered private String sql; + private boolean failOnError; + public JdbcEnvironmentRepository(JdbcTemplate jdbc, JdbcEnvironmentProperties properties) { this.jdbc = jdbc; this.order = properties.getOrder(); this.sql = properties.getSql(); + this.failOnError = properties.isFailOnError(); } public String getSql() { @@ -99,10 +107,22 @@ public class JdbcEnvironmentRepository implements EnvironmentRepository, Ordered Collections.reverse(envs); for (String app : applications) { for (String env : envs) { - Map next = (Map) this.jdbc.query(this.sql, - new Object[] { app, env, label }, this.extractor); - if (!next.isEmpty()) { - environment.add(new PropertySource(app + "-" + env, next)); + try { + Map next = (Map) this.jdbc.query( + this.sql, new Object[] { app, env, label }, this.extractor); + if (!next.isEmpty()) { + environment.add(new PropertySource(app + "-" + env, next)); + } + } + catch (DataAccessException e) { + if (!failOnError) { + if (logger.isDebugEnabled()) { + logger.debug("Failed to retrieve configuration from JDBC Repository", e); + } + } + else { + throw e; + } } } } @@ -118,6 +138,14 @@ public class JdbcEnvironmentRepository implements EnvironmentRepository, Ordered this.order = order; } + public boolean isFailOnError() { + return failOnError; + } + + public void setFailOnError(boolean failOnError) { + this.failOnError = failOnError; + } + } class PropertiesResultSetExtractor implements ResultSetExtractor> { From 52e2d9bf64f80ee9cc28954b020849132b1f8328 Mon Sep 17 00:00:00 2001 From: Craig Walls Date: Wed, 23 Sep 2020 06:52:56 -0600 Subject: [PATCH 2/3] Optionally throw exception when a repository can't be read. By default, an exception will be thrown. Fixes gh-661 Fixes gh-1712 --- .../server/config/CompositeConfiguration.java | 11 ++- .../server/config/ConfigServerProperties.java | 19 +++++ .../EnvironmentRepositoryConfiguration.java | 9 +-- .../CompositeEnvironmentRepository.java | 24 +++++-- ...rchPathCompositeEnvironmentRepository.java | 6 +- .../CompositeEnvironmentRepositoryTests.java | 69 ++++++++++++++++--- 6 files changed, 114 insertions(+), 24 deletions(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/CompositeConfiguration.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/CompositeConfiguration.java index bd1aa753..2e8f362a 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/CompositeConfiguration.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/CompositeConfiguration.java @@ -39,18 +39,20 @@ public class CompositeConfiguration { private List environmentRepos = new ArrayList<>(); + private ConfigServerProperties properties; + @Bean @Primary @ConditionalOnBean(SearchPathLocator.class) public SearchPathCompositeEnvironmentRepository searchPathCompositeEnvironmentRepository() { - return new SearchPathCompositeEnvironmentRepository(this.environmentRepos); + return new SearchPathCompositeEnvironmentRepository(this.environmentRepos, properties.isFailOnCompositeError()); } @Bean @Primary @ConditionalOnMissingBean(SearchPathLocator.class) public CompositeEnvironmentRepository compositeEnvironmentRepository() { - return new CompositeEnvironmentRepository(this.environmentRepos); + return new CompositeEnvironmentRepository(this.environmentRepos, properties.isFailOnCompositeError()); } @Autowired @@ -58,4 +60,9 @@ public class CompositeConfiguration { this.environmentRepos = repos; } + @Autowired + public void setProperties(ConfigServerProperties properties) { + this.properties = properties; + } + } diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/ConfigServerProperties.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/ConfigServerProperties.java index 309f263d..90b5dc24 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/ConfigServerProperties.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/ConfigServerProperties.java @@ -73,6 +73,17 @@ public class ConfigServerProperties { */ private String defaultProfile = "default"; + /** + * Flag indicating that if there are any errors reading properties from a subordinate + * environment repository in a composite environment repository, then the entire + * composite read should fail. Useful when set to false when a Vault repository is in + * the composite to allow clients to still read properties from other repositories + * without providing a valid Vault token. + * + * Defaults to true, resulting in a failure on any error. + */ + private boolean failOnCompositeError = true; + /** * Decryption configuration for when server handles encrypted properties before * sending them to clients. @@ -147,6 +158,14 @@ public class ConfigServerProperties { this.defaultProfile = defaultProfile; } + public boolean isFailOnCompositeError() { + return failOnCompositeError; + } + + public void setFailOnCompositeError(boolean failOnCompositeError) { + this.failOnCompositeError = failOnCompositeError; + } + /** * Encryption properties. */ diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java index b70209bf..96b02c1c 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java @@ -453,16 +453,17 @@ class CompositeRepositoryConfiguration { @Bean @ConditionalOnSearchPathLocator public SearchPathCompositeEnvironmentRepository searchPathCompositeEnvironmentRepository( - List environmentRepositories) { - return new SearchPathCompositeEnvironmentRepository(environmentRepositories); + List environmentRepositories, ConfigServerProperties properties) { + return new SearchPathCompositeEnvironmentRepository(environmentRepositories, + properties.isFailOnCompositeError()); } @Primary @Bean @ConditionalOnMissingSearchPathLocator public CompositeEnvironmentRepository compositeEnvironmentRepository( - List environmentRepositories) { - return new CompositeEnvironmentRepository(environmentRepositories); + List environmentRepositories, ConfigServerProperties properties) { + return new CompositeEnvironmentRepository(environmentRepositories, properties.isFailOnCompositeError()); } } diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepository.java index 8bdfc8dd..49dad95e 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepository.java @@ -19,6 +19,9 @@ package org.springframework.cloud.config.server.environment; import java.util.Collections; import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.cloud.config.environment.Environment; import org.springframework.core.OrderComparator; @@ -30,18 +33,22 @@ import org.springframework.core.OrderComparator; */ public class CompositeEnvironmentRepository implements EnvironmentRepository { + Log log = LogFactory.getLog(getClass()); + protected List environmentRepositories; + private boolean failOnError; + /** * Creates a new {@link CompositeEnvironmentRepository}. * @param environmentRepositories The list of {@link EnvironmentRepository}s to create * the composite from. */ - public CompositeEnvironmentRepository( - List environmentRepositories) { + public CompositeEnvironmentRepository(List environmentRepositories, boolean failOnError) { // Sort the environment repositories by the priority Collections.sort(environmentRepositories, OrderComparator.INSTANCE); this.environmentRepositories = environmentRepositories; + this.failOnError = failOnError; } @Override @@ -63,8 +70,17 @@ public class CompositeEnvironmentRepository implements EnvironmentRepository { } else { for (EnvironmentRepository repo : environmentRepositories) { - env.addAll(repo.findOne(application, profile, label, includeOrigin) - .getPropertySources()); + try { + env.addAll(repo.findOne(application, profile, label, includeOrigin).getPropertySources()); + } + catch (Exception e) { + if (failOnError) { + throw e; + } + else { + log.info("Error adding environment for " + repo); + } + } } } return env; diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/SearchPathCompositeEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/SearchPathCompositeEnvironmentRepository.java index 2e17c9ec..9bb5b845 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/SearchPathCompositeEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/SearchPathCompositeEnvironmentRepository.java @@ -33,9 +33,9 @@ public class SearchPathCompositeEnvironmentRepository * @param environmentRepositories The {@link EnvironmentRepository}s to create this * composite from. */ - public SearchPathCompositeEnvironmentRepository( - List environmentRepositories) { - super(environmentRepositories); + public SearchPathCompositeEnvironmentRepository(List environmentRepositories, + boolean failOnError) { + super(environmentRepositories, failOnError); } @Override diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepositoryTests.java index 895274d9..5d0b92a0 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepositoryTests.java @@ -76,8 +76,8 @@ public class CompositeEnvironmentRepositoryTests { repos.add(new TestOrderedEnvironmentRepository(3, e1, loc1)); repos.add(new TestOrderedEnvironmentRepository(2, e3, loc2)); repos.add(new TestOrderedEnvironmentRepository(1, e2, loc3)); - SearchPathCompositeEnvironmentRepository compositeRepo = new SearchPathCompositeEnvironmentRepository( - repos); + SearchPathCompositeEnvironmentRepository compositeRepo = new SearchPathCompositeEnvironmentRepository(repos, + true); Environment compositeEnv = compositeRepo.findOne("foo", "bar", "world", false); List propertySources = compositeEnv.getPropertySources(); assertThat(propertySources.size()).isEqualTo(5); @@ -123,17 +123,16 @@ public class CompositeEnvironmentRepositoryTests { List repos2 = new ArrayList(); repos2.add(new TestOrderedEnvironmentRepository(3, e1, loc1)); repos2.add(new TestOrderedEnvironmentRepository(3, e2, loc2)); - SearchPathCompositeEnvironmentRepository compositeRepo = new SearchPathCompositeEnvironmentRepository( - repos); + SearchPathCompositeEnvironmentRepository compositeRepo = new SearchPathCompositeEnvironmentRepository(repos, + true); SearchPathCompositeEnvironmentRepository multiCompositeRepo = new SearchPathCompositeEnvironmentRepository( - repos2); + repos2, true); Environment env = compositeRepo.findOne("app", "dev", "label", false); assertThat(env.getVersion()).isEqualTo("1"); assertThat(env.getState()).isEqualTo("state"); Environment multiEnv = multiCompositeRepo.findOne("app", "dev", "label", false); assertThat(multiEnv.getVersion()).isEqualTo(null); assertThat(multiEnv.getState()).isEqualTo(null); - } @Test @@ -145,8 +144,39 @@ public class CompositeEnvironmentRepositoryTests { } } - private static class TestOrderedEnvironmentRepository - implements EnvironmentRepository, SearchPathLocator, Ordered { + @Test + public void testFailingSubordinateRepositorySkipped() { + PropertySource p1 = mock(PropertySource.class); + doReturn("p1").when(p1).getName(); + PropertySource p2 = mock(PropertySource.class); + doReturn("p2").when(p2).getName(); + String sLoc1 = "loc1"; + String sLoc2 = "loc2"; + Environment e1 = new Environment("app", "dev"); + e1.add(p1); + e1.setVersion("1"); + e1.setState("state"); + Environment e2 = new Environment("app", "dev"); + e2.add(p2); + e2.setVersion("2"); + e2.setState("state2"); + SearchPathLocator.Locations loc1 = new SearchPathLocator.Locations("app", "dev", "label", "version", + new String[] { sLoc1 }); + SearchPathLocator.Locations loc2 = new SearchPathLocator.Locations("app", "dev", "label", "version", + new String[] { sLoc1, sLoc2 }); + List repos = new ArrayList(); + repos.add(new TestOrderedEnvironmentRepository(2, e1, loc1)); + repos.add(new TestFailingEnvironmentRepository(1, e2, loc2)); + + SearchPathCompositeEnvironmentRepository compositeRepo = new SearchPathCompositeEnvironmentRepository(repos, + false); + Environment env = compositeRepo.findOne("app", "dev", "label", false); + List propertySources = env.getPropertySources(); + assertThat(propertySources.size()).isEqualTo(1); + assertThat(propertySources.get(0).getName()).isEqualTo("p1"); + } + + private static class TestOrderedEnvironmentRepository implements EnvironmentRepository, SearchPathLocator, Ordered { private Environment env; @@ -184,15 +214,32 @@ public class CompositeEnvironmentRepositoryTests { } + private static class TestFailingEnvironmentRepository extends TestOrderedEnvironmentRepository { + + TestFailingEnvironmentRepository(int order, Environment env, Locations locations) { + super(order, env, locations); + } + + @Override + public Environment findOne(String application, String profile, String label, boolean includeOrigin) { + throw new IllegalArgumentException("Failing for some reason"); + } + + @Override + public Environment findOne(String application, String profile, String label) { + throw new IllegalArgumentException("Failing for some reason"); + } + + } + @Configuration(proxyBeanMethods = false) static class OverrideCompositeConfig { @Bean @Primary CompositeEnvironmentRepository customCompositeEnvironmentRepository() { - return new CompositeEnvironmentRepository(Arrays - .asList(new TestOrderedEnvironmentRepository(1, - new Environment("app", "dev"), null))); + return new CompositeEnvironmentRepository(Arrays.asList( + new TestOrderedEnvironmentRepository(1, new Environment("app", "dev"), null)), true); } } From 123f64501fd3260ea517a233acc6e63fdff38288 Mon Sep 17 00:00:00 2001 From: spencergibb Date: Mon, 28 Sep 2020 11:14:27 -0400 Subject: [PATCH 3/3] formatting --- .../server/config/CompositeConfiguration.java | 6 ++- .../EnvironmentRepositoryConfiguration.java | 9 +++-- .../CompositeEnvironmentRepository.java | 7 +++- .../JdbcEnvironmentRepository.java | 4 +- ...rchPathCompositeEnvironmentRepository.java | 5 ++- .../CompositeEnvironmentRepositoryTests.java | 38 +++++++++++-------- 6 files changed, 43 insertions(+), 26 deletions(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/CompositeConfiguration.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/CompositeConfiguration.java index 2e8f362a..d34968b2 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/CompositeConfiguration.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/CompositeConfiguration.java @@ -45,14 +45,16 @@ public class CompositeConfiguration { @Primary @ConditionalOnBean(SearchPathLocator.class) public SearchPathCompositeEnvironmentRepository searchPathCompositeEnvironmentRepository() { - return new SearchPathCompositeEnvironmentRepository(this.environmentRepos, properties.isFailOnCompositeError()); + return new SearchPathCompositeEnvironmentRepository(this.environmentRepos, + properties.isFailOnCompositeError()); } @Bean @Primary @ConditionalOnMissingBean(SearchPathLocator.class) public CompositeEnvironmentRepository compositeEnvironmentRepository() { - return new CompositeEnvironmentRepository(this.environmentRepos, properties.isFailOnCompositeError()); + return new CompositeEnvironmentRepository(this.environmentRepos, + properties.isFailOnCompositeError()); } @Autowired diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java index 96b02c1c..e6ff68a5 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/config/EnvironmentRepositoryConfiguration.java @@ -453,7 +453,8 @@ class CompositeRepositoryConfiguration { @Bean @ConditionalOnSearchPathLocator public SearchPathCompositeEnvironmentRepository searchPathCompositeEnvironmentRepository( - List environmentRepositories, ConfigServerProperties properties) { + List environmentRepositories, + ConfigServerProperties properties) { return new SearchPathCompositeEnvironmentRepository(environmentRepositories, properties.isFailOnCompositeError()); } @@ -462,8 +463,10 @@ class CompositeRepositoryConfiguration { @Bean @ConditionalOnMissingSearchPathLocator public CompositeEnvironmentRepository compositeEnvironmentRepository( - List environmentRepositories, ConfigServerProperties properties) { - return new CompositeEnvironmentRepository(environmentRepositories, properties.isFailOnCompositeError()); + List environmentRepositories, + ConfigServerProperties properties) { + return new CompositeEnvironmentRepository(environmentRepositories, + properties.isFailOnCompositeError()); } } diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepository.java index 49dad95e..9dba01a0 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepository.java @@ -43,8 +43,10 @@ public class CompositeEnvironmentRepository implements EnvironmentRepository { * Creates a new {@link CompositeEnvironmentRepository}. * @param environmentRepositories The list of {@link EnvironmentRepository}s to create * the composite from. + * @param failOnError whether to throw an exception if there is an error. */ - public CompositeEnvironmentRepository(List environmentRepositories, boolean failOnError) { + public CompositeEnvironmentRepository( + List environmentRepositories, boolean failOnError) { // Sort the environment repositories by the priority Collections.sort(environmentRepositories, OrderComparator.INSTANCE); this.environmentRepositories = environmentRepositories; @@ -71,7 +73,8 @@ public class CompositeEnvironmentRepository implements EnvironmentRepository { else { for (EnvironmentRepository repo : environmentRepositories) { try { - env.addAll(repo.findOne(application, profile, label, includeOrigin).getPropertySources()); + env.addAll(repo.findOne(application, profile, label, includeOrigin) + .getPropertySources()); } catch (Exception e) { if (failOnError) { diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java index 10fd7a98..741465c6 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JdbcEnvironmentRepository.java @@ -117,7 +117,9 @@ public class JdbcEnvironmentRepository implements EnvironmentRepository, Ordered catch (DataAccessException e) { if (!failOnError) { if (logger.isDebugEnabled()) { - logger.debug("Failed to retrieve configuration from JDBC Repository", e); + logger.debug( + "Failed to retrieve configuration from JDBC Repository", + e); } } else { diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/SearchPathCompositeEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/SearchPathCompositeEnvironmentRepository.java index 9bb5b845..d51968fe 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/SearchPathCompositeEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/SearchPathCompositeEnvironmentRepository.java @@ -32,9 +32,10 @@ public class SearchPathCompositeEnvironmentRepository * Creates a new {@link SearchPathCompositeEnvironmentRepository}. * @param environmentRepositories The {@link EnvironmentRepository}s to create this * composite from. + * @param failOnError whether to throw an exception if there is an error. */ - public SearchPathCompositeEnvironmentRepository(List environmentRepositories, - boolean failOnError) { + public SearchPathCompositeEnvironmentRepository( + List environmentRepositories, boolean failOnError) { super(environmentRepositories, failOnError); } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepositoryTests.java index 5d0b92a0..e61f3861 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/CompositeEnvironmentRepositoryTests.java @@ -76,8 +76,8 @@ public class CompositeEnvironmentRepositoryTests { repos.add(new TestOrderedEnvironmentRepository(3, e1, loc1)); repos.add(new TestOrderedEnvironmentRepository(2, e3, loc2)); repos.add(new TestOrderedEnvironmentRepository(1, e2, loc3)); - SearchPathCompositeEnvironmentRepository compositeRepo = new SearchPathCompositeEnvironmentRepository(repos, - true); + SearchPathCompositeEnvironmentRepository compositeRepo = new SearchPathCompositeEnvironmentRepository( + repos, true); Environment compositeEnv = compositeRepo.findOne("foo", "bar", "world", false); List propertySources = compositeEnv.getPropertySources(); assertThat(propertySources.size()).isEqualTo(5); @@ -123,8 +123,8 @@ public class CompositeEnvironmentRepositoryTests { List repos2 = new ArrayList(); repos2.add(new TestOrderedEnvironmentRepository(3, e1, loc1)); repos2.add(new TestOrderedEnvironmentRepository(3, e2, loc2)); - SearchPathCompositeEnvironmentRepository compositeRepo = new SearchPathCompositeEnvironmentRepository(repos, - true); + SearchPathCompositeEnvironmentRepository compositeRepo = new SearchPathCompositeEnvironmentRepository( + repos, true); SearchPathCompositeEnvironmentRepository multiCompositeRepo = new SearchPathCompositeEnvironmentRepository( repos2, true); Environment env = compositeRepo.findOne("app", "dev", "label", false); @@ -160,23 +160,24 @@ public class CompositeEnvironmentRepositoryTests { e2.add(p2); e2.setVersion("2"); e2.setState("state2"); - SearchPathLocator.Locations loc1 = new SearchPathLocator.Locations("app", "dev", "label", "version", - new String[] { sLoc1 }); - SearchPathLocator.Locations loc2 = new SearchPathLocator.Locations("app", "dev", "label", "version", - new String[] { sLoc1, sLoc2 }); + SearchPathLocator.Locations loc1 = new SearchPathLocator.Locations("app", "dev", + "label", "version", new String[] { sLoc1 }); + SearchPathLocator.Locations loc2 = new SearchPathLocator.Locations("app", "dev", + "label", "version", new String[] { sLoc1, sLoc2 }); List repos = new ArrayList(); repos.add(new TestOrderedEnvironmentRepository(2, e1, loc1)); repos.add(new TestFailingEnvironmentRepository(1, e2, loc2)); - SearchPathCompositeEnvironmentRepository compositeRepo = new SearchPathCompositeEnvironmentRepository(repos, - false); + SearchPathCompositeEnvironmentRepository compositeRepo = new SearchPathCompositeEnvironmentRepository( + repos, false); Environment env = compositeRepo.findOne("app", "dev", "label", false); List propertySources = env.getPropertySources(); assertThat(propertySources.size()).isEqualTo(1); assertThat(propertySources.get(0).getName()).isEqualTo("p1"); } - private static class TestOrderedEnvironmentRepository implements EnvironmentRepository, SearchPathLocator, Ordered { + private static class TestOrderedEnvironmentRepository + implements EnvironmentRepository, SearchPathLocator, Ordered { private Environment env; @@ -214,14 +215,17 @@ public class CompositeEnvironmentRepositoryTests { } - private static class TestFailingEnvironmentRepository extends TestOrderedEnvironmentRepository { + private static class TestFailingEnvironmentRepository + extends TestOrderedEnvironmentRepository { - TestFailingEnvironmentRepository(int order, Environment env, Locations locations) { + TestFailingEnvironmentRepository(int order, Environment env, + Locations locations) { super(order, env, locations); } @Override - public Environment findOne(String application, String profile, String label, boolean includeOrigin) { + public Environment findOne(String application, String profile, String label, + boolean includeOrigin) { throw new IllegalArgumentException("Failing for some reason"); } @@ -238,8 +242,10 @@ public class CompositeEnvironmentRepositoryTests { @Bean @Primary CompositeEnvironmentRepository customCompositeEnvironmentRepository() { - return new CompositeEnvironmentRepository(Arrays.asList( - new TestOrderedEnvironmentRepository(1, new Environment("app", "dev"), null)), true); + return new CompositeEnvironmentRepository(Arrays + .asList(new TestOrderedEnvironmentRepository(1, + new Environment("app", "dev"), null)), + true); } }