Guards Should Use Environment

Previously all of the guard behavior was triggered by the contents of
environment variables.  In a Spring Boot application, looking at the
environment isn't the only way to get configuration.  This change updates the
guards to use the Environment for configuration retrieval.

[resolves #30]

Signed-off-by: Ben Hale <bhale@vmware.com>
This commit is contained in:
Ben Hale
2020-05-11 14:24:41 -07:00
parent 3ba8b42ce4
commit a33dcf034b
23 changed files with 194 additions and 174 deletions

View File

@@ -23,7 +23,6 @@ import org.springframework.boot.context.config.ConfigFileApplicationListener;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.cloud.bindings.Bindings;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.SpringFactoriesLoader;
@@ -66,7 +65,6 @@ public final class BindingSpecificEnvironmentPostProcessor implements Environmen
this.bindings = new Bindings();
this.processors = SpringFactoriesLoader.
loadFactories(BindingsPropertiesProcessor.class, getClass().getClassLoader());
AnnotationAwareOrderComparator.sort(this.processors);
}
BindingSpecificEnvironmentPostProcessor(Bindings bindings, BindingsPropertiesProcessor... processors) {
@@ -76,7 +74,7 @@ public final class BindingSpecificEnvironmentPostProcessor implements Environmen
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
if (!isGlobalEnabled()) {
if (!isGlobalEnabled(environment)) {
return;
}
@@ -86,7 +84,7 @@ public final class BindingSpecificEnvironmentPostProcessor implements Environmen
}
Map<String, Object> properties = new HashMap<>();
processors.forEach(processor -> processor.process(bindings, properties));
processors.forEach(processor -> processor.process(environment, bindings, properties));
if (properties.isEmpty()) {
log.debug("No properties set from CNB Bindings. Skipping PropertySource creation.");
return;

View File

@@ -17,6 +17,7 @@
package org.springframework.cloud.bindings.boot;
import org.springframework.cloud.bindings.Bindings;
import org.springframework.core.env.Environment;
import java.util.Map;
@@ -30,9 +31,10 @@ public interface BindingsPropertiesProcessor {
/**
* Transform the currently accumulated {@link Bindings}-related properties.
*
* @param bindings the {@code Bindings} exposed to the application.
* @param properties the currently accumulated properties.
* @param environment the {@link Environment} that the processor is executing with.
* @param bindings the {@code Bindings} exposed to the application.
* @param properties the currently accumulated properties.
*/
void process(Bindings bindings, Map<String, Object> properties);
void process(Environment environment, Bindings bindings, Map<String, Object> properties);
}

View File

@@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot;
import org.springframework.cloud.bindings.Binding;
import org.springframework.cloud.bindings.Bindings;
import org.springframework.core.env.Environment;
import java.util.Map;
@@ -35,8 +36,8 @@ public final class CassandraBindingsPropertiesProcessor implements BindingsPrope
public static final String KIND = "Cassandra";
@Override
public void process(Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(KIND)) {
public void process(Environment environment, Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(environment, KIND)) {
return;
}

View File

@@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot;
import org.springframework.cloud.bindings.Binding;
import org.springframework.cloud.bindings.Bindings;
import org.springframework.core.env.Environment;
import java.util.Map;
@@ -36,8 +37,8 @@ public final class Db2BindingsPropertiesProcessor implements BindingsPropertiesP
public static final String KIND = "DB2";
@Override
public void process(Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(KIND)) {
public void process(Environment environment, Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(environment, KIND)) {
return;
}

View File

@@ -16,17 +16,18 @@
package org.springframework.cloud.bindings.boot;
import org.springframework.core.env.Environment;
final class Guards {
static boolean isGlobalEnabled() {
String value = System.getProperty("org.springframework.cloud.bindings.boot.enable", "false");
return Boolean.parseBoolean(value);
static boolean isGlobalEnabled(Environment environment) {
return environment.getProperty("org.springframework.cloud.bindings.boot.enable", Boolean.class, false);
}
static boolean isKindEnabled(String kind) {
String property = String.format("org.springframework.cloud.bindings.boot.%s.enable", kind.toLowerCase());
String value = System.getProperty(property, "true");
return Boolean.parseBoolean(value);
static boolean isKindEnabled(Environment environment, String kind) {
return environment.getProperty(
String.format("org.springframework.cloud.bindings.boot.%s.enable", kind.toLowerCase()),
Boolean.class, true);
}
}

View File

@@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot;
import org.springframework.cloud.bindings.Binding;
import org.springframework.cloud.bindings.Bindings;
import org.springframework.core.env.Environment;
import java.util.Map;
@@ -34,8 +35,8 @@ public final class MongoDbBindingsPropertiesProcessor implements BindingsPropert
public static final String KIND = "MongoDB";
@Override
public void process(Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(KIND)) {
public void process(Environment environment, Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(environment, KIND)) {
return;
}

View File

@@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot;
import org.springframework.cloud.bindings.Binding;
import org.springframework.cloud.bindings.Bindings;
import org.springframework.core.env.Environment;
import java.util.Map;
@@ -36,8 +37,8 @@ public final class MySqlBindingsPropertiesProcessor implements BindingsPropertie
public static final String KIND = "MySQL";
@Override
public void process(Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(KIND)) {
public void process(Environment environment, Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(environment, KIND)) {
return;
}

View File

@@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot;
import org.springframework.cloud.bindings.Binding;
import org.springframework.cloud.bindings.Bindings;
import org.springframework.core.env.Environment;
import java.util.Map;
@@ -36,8 +37,8 @@ public final class OracleBindingsPropertiesProcessor implements BindingsProperti
public static final String KIND = "Oracle";
@Override
public void process(Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(KIND)) {
public void process(Environment environment, Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(environment, KIND)) {
return;
}

View File

@@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot;
import org.springframework.cloud.bindings.Binding;
import org.springframework.cloud.bindings.Bindings;
import org.springframework.core.env.Environment;
import java.util.Map;
@@ -36,8 +37,8 @@ public final class PostgreSqlBindingsPropertiesProcessor implements BindingsProp
public static final String KIND = "PostgreSQL";
@Override
public void process(Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(KIND)) {
public void process(Environment environment, Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(environment, KIND)) {
return;
}

View File

@@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot;
import org.springframework.cloud.bindings.Binding;
import org.springframework.cloud.bindings.Bindings;
import org.springframework.core.env.Environment;
import java.util.Map;
@@ -34,8 +35,8 @@ public final class RedisBindingsPropertiesProcessor implements BindingsPropertie
public static final String KIND = "Redis";
@Override
public void process(Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(KIND)) {
public void process(Environment environment, Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(environment, KIND)) {
return;
}

View File

@@ -18,6 +18,7 @@ package org.springframework.cloud.bindings.boot;
import org.springframework.cloud.bindings.Binding;
import org.springframework.cloud.bindings.Bindings;
import org.springframework.core.env.Environment;
import java.util.Map;
@@ -36,8 +37,8 @@ public final class SqlServerBindingsPropertiesProcessor implements BindingsPrope
public static final String KIND = "SQLServer";
@Override
public void process(Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(KIND)) {
public void process(Environment environment, Bindings bindings, Map<String, Object> properties) {
if (!isKindEnabled(environment, KIND)) {
return;
}