From 38cf0cd738b6103b0d0ae6139d39da4fc2b78383 Mon Sep 17 00:00:00 2001 From: Eric Bottard Date: Mon, 10 Aug 2015 12:57:12 +0200 Subject: [PATCH] XD-3380: Use AutoConfiguration for Binder Configurations --- .../spring-cloud-stream-binder-rabbit/pom.xml | 6 ++++++ .../config/RabbitBinderConfigurationProperties.java | 6 +++--- .../RabbitMessageChannelBinderConfiguration.java | 7 ++++++- .../config/RabbitServiceAutoConfiguration.java | 9 +++++---- .../rabbit/config/SpringRabbitMQProperties.java | 6 +++--- .../spring-cloud-stream/rabbit-binder.properties | 4 ++-- .../src/main/resources/META-INF/spring.factories | 2 ++ .../spring-cloud-stream-binder-redis/pom.xml | 6 ++++++ .../redis/config/RedisServiceAutoConfiguration.java | 13 +++++-------- .../spring-cloud-stream/redis-binder.properties | 0 .../src/main/resources/META-INF/spring.factories | 2 ++ spring-cloud-stream/pom.xml | 1 + .../cloud/stream/annotation/EnableModule.java | 6 +++--- 13 files changed, 44 insertions(+), 24 deletions(-) rename spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/RabbitServiceConfiguration.java => spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/RabbitServiceAutoConfiguration.java (89%) rename {spring-cloud-stream => spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit}/src/main/resources/META-INF/spring-cloud-stream/rabbit-binder.properties (90%) create mode 100644 spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/resources/META-INF/spring.factories rename spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/RedisServiceConfiguration.java => spring-cloud-stream-binders/spring-cloud-stream-binder-redis/src/main/java/org/springframework/cloud/stream/binder/redis/config/RedisServiceAutoConfiguration.java (77%) rename {spring-cloud-stream => spring-cloud-stream-binders/spring-cloud-stream-binder-redis}/src/main/resources/META-INF/spring-cloud-stream/redis-binder.properties (100%) create mode 100644 spring-cloud-stream-binders/spring-cloud-stream-binder-redis/src/main/resources/META-INF/spring.factories diff --git a/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/pom.xml b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/pom.xml index 062050a59..69fef2ddb 100644 --- a/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/pom.xml +++ b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/pom.xml @@ -32,9 +32,15 @@ spring-boot-autoconfigure true + + org.springframework.cloud + spring-cloud-lattice-connector + true + org.springframework.cloud spring-cloud-stream-binder-test + test org.springframework.boot diff --git a/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/RabbitBinderConfigurationProperties.java b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/RabbitBinderConfigurationProperties.java index b8379283d..490598197 100644 --- a/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/RabbitBinderConfigurationProperties.java +++ b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/RabbitBinderConfigurationProperties.java @@ -31,7 +31,7 @@ class RabbitBinderConfigurationProperties { private int backOffMaxInterval; - private int backOffMultiplier; + private double backOffMultiplier; private boolean transacted; @@ -97,11 +97,11 @@ class RabbitBinderConfigurationProperties { this.backOffMaxInterval = backOffMaxInterval; } - public int getBackOffMultiplier() { + public double getBackOffMultiplier() { return backOffMultiplier; } - public void setBackOffMultiplier(int backOffMultiplier) { + public void setBackOffMultiplier(double backOffMultiplier) { this.backOffMultiplier = backOffMultiplier; } diff --git a/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/RabbitMessageChannelBinderConfiguration.java b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/RabbitMessageChannelBinderConfiguration.java index 868750f36..d02b8b666 100644 --- a/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/RabbitMessageChannelBinderConfiguration.java +++ b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/RabbitMessageChannelBinderConfiguration.java @@ -35,7 +35,7 @@ import org.springframework.integration.codec.Codec; @Configuration @Import(CodecConfiguration.class) -@EnableConfigurationProperties({RabbitBinderConfigurationProperties.class, SpringRabbitMQProperties.class}) +@EnableConfigurationProperties({RabbitBinderConfigurationProperties.class}) public class RabbitMessageChannelBinderConfiguration { @Autowired @@ -96,4 +96,9 @@ public class RabbitMessageChannelBinderConfiguration { ConnectionFactorySettings rabbitConnectionFactorySettings() { return new ConnectionFactorySettings(); } + + @Bean + SpringRabbitMQProperties springRabbitMQProperties() { + return new SpringRabbitMQProperties(); + } } diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/RabbitServiceConfiguration.java b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/RabbitServiceAutoConfiguration.java similarity index 89% rename from spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/RabbitServiceConfiguration.java rename to spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/RabbitServiceAutoConfiguration.java index 315f35ead..5a2e680f4 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/RabbitServiceConfiguration.java +++ b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/RabbitServiceAutoConfiguration.java @@ -14,13 +14,14 @@ * limitations under the License. */ -package org.springframework.cloud.stream.config; +package org.springframework.cloud.stream.binder.rabbit.config; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.cloud.Cloud; import org.springframework.cloud.CloudFactory; +import org.springframework.cloud.stream.binder.Binder; import org.springframework.cloud.stream.binder.rabbit.RabbitMessageChannelBinder; import org.springframework.cloud.stream.binder.rabbit.config.RabbitMessageChannelBinderConfiguration; import org.springframework.context.annotation.Bean; @@ -36,13 +37,13 @@ import org.springframework.context.annotation.PropertySource; * @author Dave Syer * @author Glenn Renfro * @author David Turanski + * @author Eric Bottard */ @Configuration -@ConditionalOnClass(RabbitMessageChannelBinder.class) -@ConditionalOnMissingBean(RabbitMessageChannelBinder.class) +@ConditionalOnMissingBean(Binder.class) @Import(RabbitMessageChannelBinderConfiguration.class) @PropertySource("classpath:/META-INF/spring-cloud-stream/rabbit-binder.properties") -public class RabbitServiceConfiguration { +public class RabbitServiceAutoConfiguration { @Configuration @Profile("cloud") protected static class CloudConfig { diff --git a/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/SpringRabbitMQProperties.java b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/SpringRabbitMQProperties.java index 8d9651b34..00fa4cec1 100644 --- a/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/SpringRabbitMQProperties.java +++ b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/java/org/springframework/cloud/stream/binder/rabbit/config/SpringRabbitMQProperties.java @@ -24,11 +24,11 @@ import org.springframework.core.io.Resource; @ConfigurationProperties(prefix = "spring.rabbitmq") class SpringRabbitMQProperties { - private String[] addresses; + private String[] addresses = new String[0]; - private String[] adminAdresses; + private String[] adminAdresses = new String[0]; - private String[] nodes; + private String[] nodes = new String[0]; private String username; diff --git a/spring-cloud-stream/src/main/resources/META-INF/spring-cloud-stream/rabbit-binder.properties b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/resources/META-INF/spring-cloud-stream/rabbit-binder.properties similarity index 90% rename from spring-cloud-stream/src/main/resources/META-INF/spring-cloud-stream/rabbit-binder.properties rename to spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/resources/META-INF/spring-cloud-stream/rabbit-binder.properties index d7f95153d..6a8091cb9 100644 --- a/spring-cloud-stream/src/main/resources/META-INF/spring-cloud-stream/rabbit-binder.properties +++ b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/resources/META-INF/spring-cloud-stream/rabbit-binder.properties @@ -9,7 +9,7 @@ spring.cloud.stream.binder.rabbit.default.batchSize: 100 spring.cloud.stream.binder.rabbit.default.batchTimeout: 5000 spring.cloud.stream.binder.rabbit.default.compress: false spring.cloud.stream.binder.rabbit.default.concurrency: 1 -spring.cloud.stream.binder.rabbit.default.deliveryMode: PERSISTENT +spring.cloud.stream.binder.rabbit.default.defaultDeliveryMode: PERSISTENT spring.cloud.stream.binder.rabbit.default.durableSubscription: false spring.cloud.stream.binder.rabbit.default.maxAttempts: 3 spring.cloud.stream.binder.rabbit.default.maxConcurrency: 1 @@ -18,6 +18,6 @@ spring.cloud.stream.binder.rabbit.default.prefetch: 1 spring.cloud.stream.binder.rabbit.default.replyHeaderPatterns: STANDARD_REPLY_HEADERS,* spring.cloud.stream.binder.rabbit.default.republishToDLQ: false spring.cloud.stream.binder.rabbit.default.requestHeaderPatterns: STANDARD_REQUEST_HEADERS,* -spring.cloud.stream.binder.rabbit.default.requeue: true +spring.cloud.stream.binder.rabbit.default.defaultRequeueRejected: true spring.cloud.stream.binder.rabbit.default.transacted:false spring.cloud.stream.binder.rabbit.default.txSize: 1 diff --git a/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/resources/META-INF/spring.factories b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..cde4a6309 --- /dev/null +++ b/spring-cloud-stream-binders/spring-cloud-stream-binder-rabbit/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration:\ +org.springframework.cloud.stream.binder.rabbit.config.RabbitServiceAutoConfiguration diff --git a/spring-cloud-stream-binders/spring-cloud-stream-binder-redis/pom.xml b/spring-cloud-stream-binders/spring-cloud-stream-binder-redis/pom.xml index 642ec3740..accdcf6f5 100644 --- a/spring-cloud-stream-binders/spring-cloud-stream-binder-redis/pom.xml +++ b/spring-cloud-stream-binders/spring-cloud-stream-binder-redis/pom.xml @@ -32,9 +32,15 @@ spring-boot-autoconfigure true + + org.springframework.cloud + spring-cloud-lattice-connector + true + org.springframework.cloud spring-cloud-stream-binder-test + test org.springframework.boot diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/RedisServiceConfiguration.java b/spring-cloud-stream-binders/spring-cloud-stream-binder-redis/src/main/java/org/springframework/cloud/stream/binder/redis/config/RedisServiceAutoConfiguration.java similarity index 77% rename from spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/RedisServiceConfiguration.java rename to spring-cloud-stream-binders/spring-cloud-stream-binder-redis/src/main/java/org/springframework/cloud/stream/binder/redis/config/RedisServiceAutoConfiguration.java index 174d1db47..6f6271226 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/config/RedisServiceConfiguration.java +++ b/spring-cloud-stream-binders/spring-cloud-stream-binder-redis/src/main/java/org/springframework/cloud/stream/binder/redis/config/RedisServiceAutoConfiguration.java @@ -14,18 +14,16 @@ * limitations under the License. */ -package org.springframework.cloud.stream.config; +package org.springframework.cloud.stream.binder.redis.config; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.cloud.Cloud; import org.springframework.cloud.CloudFactory; +import org.springframework.cloud.stream.binder.Binder; import org.springframework.cloud.stream.binder.redis.RedisMessageChannelBinder; -import org.springframework.cloud.stream.binder.redis.config.RedisMessageChannelBinderConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; -import org.springframework.context.annotation.ImportResource; import org.springframework.context.annotation.Profile; import org.springframework.context.annotation.PropertySource; import org.springframework.data.redis.connection.RedisConnectionFactory; @@ -36,14 +34,13 @@ import org.springframework.data.redis.connection.RedisConnectionFactory; * @author Mark Fisher * @author Dave Syer * @author David Turanski + * @author Eric Bottard */ @Configuration -@ConditionalOnClass(RedisMessageChannelBinder.class) -@ConditionalOnMissingBean(RedisMessageChannelBinder.class) +@ConditionalOnMissingBean(Binder.class) @Import(RedisMessageChannelBinderConfiguration.class) -@ImportResource("classpath*:/META-INF/spring-xd/analytics/redis-analytics.xml") @PropertySource("classpath:/META-INF/spring-cloud-stream/redis-binder.properties") -public class RedisServiceConfiguration { +public class RedisServiceAutoConfiguration { @Configuration @Profile("cloud") diff --git a/spring-cloud-stream/src/main/resources/META-INF/spring-cloud-stream/redis-binder.properties b/spring-cloud-stream-binders/spring-cloud-stream-binder-redis/src/main/resources/META-INF/spring-cloud-stream/redis-binder.properties similarity index 100% rename from spring-cloud-stream/src/main/resources/META-INF/spring-cloud-stream/redis-binder.properties rename to spring-cloud-stream-binders/spring-cloud-stream-binder-redis/src/main/resources/META-INF/spring-cloud-stream/redis-binder.properties diff --git a/spring-cloud-stream-binders/spring-cloud-stream-binder-redis/src/main/resources/META-INF/spring.factories b/spring-cloud-stream-binders/spring-cloud-stream-binder-redis/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..acd5c3a0c --- /dev/null +++ b/spring-cloud-stream-binders/spring-cloud-stream-binder-redis/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration:\ +org.springframework.cloud.stream.binder.redis.config.RedisServiceAutoConfiguration diff --git a/spring-cloud-stream/pom.xml b/spring-cloud-stream/pom.xml index 6b1fb51eb..cc49b8513 100644 --- a/spring-cloud-stream/pom.xml +++ b/spring-cloud-stream/pom.xml @@ -50,6 +50,7 @@ org.springframework.cloud spring-cloud-stream-binder-redis + true org.springframework.cloud diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/annotation/EnableModule.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/annotation/EnableModule.java index db18b30e1..5f1b25f0b 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/annotation/EnableModule.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/annotation/EnableModule.java @@ -27,14 +27,14 @@ import org.springframework.cloud.stream.config.AggregateBuilderConfiguration; import org.springframework.cloud.stream.config.ChannelBindingAdapterConfiguration; import org.springframework.cloud.stream.config.ModuleRegistrar; import org.springframework.cloud.stream.config.ChannelBindingAdapterRunner; -import org.springframework.cloud.stream.config.RabbitServiceConfiguration; -import org.springframework.cloud.stream.config.RedisServiceConfiguration; +import org.springframework.cloud.stream.binder.rabbit.config.RabbitServiceAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.integration.annotation.MessageEndpoint; /** * Annotation that identifies a class as a module. + * * @author Dave Syer * @author Marius Bogoevici * @author David Turanski @@ -45,7 +45,7 @@ import org.springframework.integration.annotation.MessageEndpoint; @Inherited @Configuration @MessageEndpoint -@Import({RedisServiceConfiguration.class, RabbitServiceConfiguration.class, +@Import({ ChannelBindingAdapterConfiguration.class, ChannelBindingAdapterRunner.class, AggregateBuilderConfiguration.class, ModuleRegistrar.class}) public @interface EnableModule {