From da9658ef1ff22589bbd4970f1caea771b51227e6 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 25 Jun 2018 17:04:36 -0400 Subject: [PATCH] GH-1359 Added support for property precedence Ensured that default property only takes affect if the actual binding property is not set. For example if "spring.cloud.stream.bindings.output.producer.partitionCount=4" and "spring.cloud.stream.default.producer.partitionCount=1" are both set the actual binidng property (i.e., 4) should take precedence Resolves #1359 --- .../stream/binder/ConsumerProperties.java | 4 +- .../stream/binder/ProducerProperties.java | 3 +- .../stream/config/BindingProperties.java | 3 +- .../EnvironmentEntryInitializingTreeMap.java | 5 +- .../stream/config/MergableProperties.java | 91 +++++++++++++++++++ ...SourceBindingWithGlobalPropertiesTest.java | 7 +- 6 files changed, 105 insertions(+), 8 deletions(-) create mode 100644 spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/MergableProperties.java diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/ConsumerProperties.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/ConsumerProperties.java index b21d5f13b..60ee016f8 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/ConsumerProperties.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/ConsumerProperties.java @@ -20,6 +20,8 @@ import javax.validation.constraints.Min; import com.fasterxml.jackson.annotation.JsonInclude; +import org.springframework.cloud.stream.config.MergableProperties; + /** * Common consumer properties. * @@ -30,7 +32,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; * @author Oleg Zhurakousky */ @JsonInclude(JsonInclude.Include.NON_DEFAULT) -public class ConsumerProperties { +public class ConsumerProperties implements MergableProperties{ /** * The concurrency setting of the consumer. Default: 1. diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/ProducerProperties.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/ProducerProperties.java index 2fd114bee..68cbe3f71 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/ProducerProperties.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binder/ProducerProperties.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import org.springframework.cloud.stream.config.MergableProperties; import org.springframework.expression.Expression; /** @@ -34,7 +35,7 @@ import org.springframework.expression.Expression; * @author Oleg Zhurakousky */ @JsonInclude(Include.NON_DEFAULT) -public class ProducerProperties { +public class ProducerProperties implements MergableProperties { @JsonSerialize(using = ExpressionSerializer.class) private Expression partitionKeyExpression; diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BindingProperties.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BindingProperties.java index b2c2662f6..3e98cff99 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BindingProperties.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/BindingProperties.java @@ -37,7 +37,7 @@ import org.springframework.validation.annotation.Validated; */ @JsonInclude(Include.NON_DEFAULT) @Validated -public class BindingProperties { +public class BindingProperties implements MergableProperties { public static final MimeType DEFAULT_CONTENT_TYPE = MimeTypeUtils.APPLICATION_JSON; @@ -153,5 +153,4 @@ public class BindingProperties { sb.deleteCharAt(sb.lastIndexOf(COMMA)); return "BindingProperties{" + sb.toString() + "}"; } - } diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/EnvironmentEntryInitializingTreeMap.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/EnvironmentEntryInitializingTreeMap.java index fe37f25ac..6f2165a7b 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/EnvironmentEntryInitializingTreeMap.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/EnvironmentEntryInitializingTreeMap.java @@ -95,9 +95,10 @@ public class EnvironmentEntryInitializingTreeMap extends AbstractMap