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> {