diff --git a/spring-cloud-bus/pom.xml b/spring-cloud-bus/pom.xml
index 348f7d0..af9d928 100644
--- a/spring-cloud-bus/pom.xml
+++ b/spring-cloud-bus/pom.xml
@@ -20,14 +20,17 @@
org.springframework.boot
spring-boot-starter-actuator
+ true
org.springframework.boot
spring-boot-starter-amqp
+ true
org.springframework.boot
- spring-boot-starter-integration
+ spring-boot-starter-web
+ true
org.springframework.integration
@@ -36,6 +39,7 @@
org.springframework.integration
spring-integration-amqp
+ true
org.springframework.integration
@@ -48,14 +52,17 @@
org.springframework.cloud
spring-cloud-spring-service-connector
+ true
org.springframework.cloud
spring-cloud-localconfig-connector
+ true
org.springframework.cloud
spring-cloud-cloudfoundry-connector
+ true
org.springframework.boot
diff --git a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/BusAutoConfiguration.java b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/BusAutoConfiguration.java
index c0495fc..171823d 100644
--- a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/BusAutoConfiguration.java
+++ b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/BusAutoConfiguration.java
@@ -39,8 +39,6 @@ import org.springframework.messaging.SubscribableChannel;
@ConditionalOnBusEnabled
public class BusAutoConfiguration {
- public static final String SPRING_CLOUD_BUS_ENABLED = "spring.cloud.bus.enabled";
-
@Autowired
private ConfigurableApplicationContext context;
diff --git a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/ConditionalOnBusEnabled.java b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/ConditionalOnBusEnabled.java
index 9cc330e..c85189f 100644
--- a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/ConditionalOnBusEnabled.java
+++ b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/ConditionalOnBusEnabled.java
@@ -1,17 +1,19 @@
package org.springframework.cloud.bus;
-import org.springframework.context.annotation.Conditional;
-
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+
/**
* @author Spencer Gibb
*/
-@Conditional(OnBusEnabled.class)
+@ConditionalOnProperty(value = ConditionalOnBusEnabled.SPRING_CLOUD_BUS_ENABLED, matchIfMissing = true)
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
public @interface ConditionalOnBusEnabled {
+
+ public static String SPRING_CLOUD_BUS_ENABLED = "spring.cloud.bus.amqp.enabled";
}
diff --git a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/OnBusEnabled.java b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/OnBusEnabled.java
deleted file mode 100644
index d247cb1..0000000
--- a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/OnBusEnabled.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.springframework.cloud.bus;
-
-import org.springframework.boot.autoconfigure.condition.ConditionOutcome;
-import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
-import org.springframework.boot.bind.RelaxedPropertyResolver;
-import org.springframework.context.annotation.ConditionContext;
-import org.springframework.core.type.AnnotatedTypeMetadata;
-
-import static org.springframework.cloud.bus.BusAutoConfiguration.SPRING_CLOUD_BUS_ENABLED;
-
-/**
- * Match if spring.cloud.bus.enabled is missing or not false
- * @author Spencer Gibb
- */
-class OnBusEnabled extends SpringBootCondition {
- @Override
- public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {
- RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(context.getEnvironment());
- String enabled = resolver.getProperty(SPRING_CLOUD_BUS_ENABLED);
-
- if (!"false".equalsIgnoreCase(enabled)) {
- return ConditionOutcome.match();
- }
- return ConditionOutcome.noMatch(SPRING_CLOUD_BUS_ENABLED + " is " + enabled);
- }
-}
diff --git a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/amqp/AmqpBusAutoConfiguration.java b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/amqp/AmqpBusAutoConfiguration.java
index 406f7f2..9980a7a 100644
--- a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/amqp/AmqpBusAutoConfiguration.java
+++ b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/amqp/AmqpBusAutoConfiguration.java
@@ -7,12 +7,14 @@ import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
+import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.bus.ConditionalOnBusEnabled;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -43,9 +45,11 @@ import com.fasterxml.jackson.databind.ObjectMapper;
@ConditionalOnBusEnabled
@ConditionalOnClass({ AmqpTemplate.class, RabbitTemplate.class })
@ConditionalOnProperty(value = "spring.cloud.bus.amqp.enabled", matchIfMissing = true)
+@EnableConfigurationProperties(AmqpBusProperties.class)
public class AmqpBusAutoConfiguration {
- public static final String SPRING_CLOUD_BUS = "spring.cloud.bus";
+ @Autowired
+ private AmqpBusProperties bus;
@Autowired(required = false)
@BusConnectionFactory
@@ -56,6 +60,8 @@ public class AmqpBusAutoConfiguration {
private RabbitTemplate amqpTemplate;
+ private RabbitAdmin amqpAdmin;
+
@Autowired(required = false)
private ObjectMapper objectMapper;
@@ -65,6 +71,11 @@ public class AmqpBusAutoConfiguration {
Jackson2JsonMessageConverter converter = messageConverter();
amqpTemplate.setMessageConverter(converter);
this.amqpTemplate = amqpTemplate;
+ this.amqpAdmin = new RabbitAdmin(connectionFactory());
+ cloudBusExchange().setAdminsThatShouldDeclare(this.amqpAdmin);
+ localCloudBusQueueBinding().setAdminsThatShouldDeclare(this.amqpAdmin);
+ localCloudBusQueue().setAdminsThatShouldDeclare(this.amqpAdmin);
+ this.amqpAdmin.afterPropertiesSet();
}
return amqpTemplate;
}
@@ -72,7 +83,7 @@ public class AmqpBusAutoConfiguration {
@Bean
protected FanoutExchange cloudBusExchange() {
// TODO: change to TopicExchange?
- FanoutExchange exchange = new FanoutExchange(SPRING_CLOUD_BUS);
+ FanoutExchange exchange = new FanoutExchange(bus.getExchange());
return exchange;
}
@@ -92,7 +103,7 @@ public class AmqpBusAutoConfiguration {
return IntegrationFlows
.from(cloudBusOutboundChannel)
.handle(Amqp.outboundAdapter(amqpTemplate()).exchangeName(
- SPRING_CLOUD_BUS)).get();
+ bus.getExchange())).get();
}
@Bean
diff --git a/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/amqp/AmqpBusProperties.java b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/amqp/AmqpBusProperties.java
new file mode 100644
index 0000000..dc6c23a
--- /dev/null
+++ b/spring-cloud-bus/src/main/java/org/springframework/cloud/bus/amqp/AmqpBusProperties.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2014-2015 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.bus.amqp;
+
+import lombok.Data;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * @author Dave Syer
+ *
+ */
+@ConfigurationProperties("spring.cloud.bus.amqp")
+@Data
+public class AmqpBusProperties {
+
+ public static final String SPRING_CLOUD_BUS = "spring.cloud.bus";
+
+ private boolean enabled;
+
+ private String exchange = SPRING_CLOUD_BUS;
+
+}
diff --git a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/ConditionalOnBusEnabledTests.java b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/ConditionalOnBusEnabledTests.java
index 0536418..d3d0f79 100644
--- a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/ConditionalOnBusEnabledTests.java
+++ b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/ConditionalOnBusEnabledTests.java
@@ -1,5 +1,8 @@
package org.springframework.cloud.bus;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
import org.junit.After;
import org.junit.Rule;
import org.junit.Test;
@@ -9,10 +12,6 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.springframework.cloud.bus.BusAutoConfiguration.SPRING_CLOUD_BUS_ENABLED;
-
/**
* @author Spencer Gibb
*/
@@ -32,7 +31,7 @@ public class ConditionalOnBusEnabledTests {
@Test
public void busEnabledTrue() {
- load(MyBusEnabledConfig.class, SPRING_CLOUD_BUS_ENABLED+":true");
+ load(MyBusEnabledConfig.class, ConditionalOnBusEnabled.SPRING_CLOUD_BUS_ENABLED+":true");
assertTrue("missing bean from @ConditionalOnBusEnabled config",
this.context.containsBean("foo"));
}
@@ -46,7 +45,7 @@ public class ConditionalOnBusEnabledTests {
@Test
public void busDisabled() {
- load(MyBusEnabledConfig.class, SPRING_CLOUD_BUS_ENABLED+":false");
+ load(MyBusEnabledConfig.class, ConditionalOnBusEnabled.SPRING_CLOUD_BUS_ENABLED+":false");
assertFalse("bean exists from disabled @ConditionalOnBusEnabled config",
this.context.containsBean("foo"));
}
diff --git a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/amqp/AmqpBusAutoConfigurationTests.java b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/amqp/AmqpBusAutoConfigurationTests.java
index e827434..c06c351 100644
--- a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/amqp/AmqpBusAutoConfigurationTests.java
+++ b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/amqp/AmqpBusAutoConfigurationTests.java
@@ -1,10 +1,11 @@
package org.springframework.cloud.bus.amqp;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
-import static org.springframework.cloud.bus.BusAutoConfiguration.SPRING_CLOUD_BUS_ENABLED;
import org.junit.Test;
+import org.springframework.amqp.core.Declarable;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
@@ -12,6 +13,7 @@ import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
import org.springframework.boot.autoconfigure.amqp.RabbitProperties;
import org.springframework.boot.test.EnvironmentTestUtils;
import org.springframework.cloud.bus.BusAutoConfiguration;
+import org.springframework.cloud.bus.ConditionalOnBusEnabled;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -38,6 +40,18 @@ public class AmqpBusAutoConfigurationTests {
context.close();
}
+ @Test
+ public void qualifiedConnectionFactoryAdmin() throws Exception {
+ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
+ getConfigClasses(QualifiedConnectionFactory.class));
+ assertTrue(context.containsBean("amqpAdmin"));
+ Object admin = context.getBean("amqpAdmin");
+ Declarable declarable = context.getBean("cloudBusExchange", Declarable.class);
+ assertEquals(1, declarable.getDeclaringAdmins().size());
+ assertFalse(declarable.getDeclaringAdmins().contains(admin));
+ context.close();
+ }
+
@Test
public void unqualifiedConnectionFactory() throws Exception {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
@@ -57,7 +71,7 @@ public class AmqpBusAutoConfigurationTests {
@Test
public void notStartedIfBusDisabled() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
- EnvironmentTestUtils.addEnvironment(context, SPRING_CLOUD_BUS_ENABLED+":false");
+ EnvironmentTestUtils.addEnvironment(context, ConditionalOnBusEnabled.SPRING_CLOUD_BUS_ENABLED+":false");
context.register(getConfigClasses());
context.refresh();
diff --git a/spring-cloud-bus/src/test/resources/application.properties b/spring-cloud-bus/src/test/resources/application.properties
new file mode 100644
index 0000000..d18f0f6
--- /dev/null
+++ b/spring-cloud-bus/src/test/resources/application.properties
@@ -0,0 +1 @@
+spring.main.web-environment: false
\ No newline at end of file