only load implementation specific auto config if @ConditionalOnBusEnabled
fixes gh-12
This commit is contained in:
@@ -36,9 +36,11 @@ import org.springframework.messaging.SubscribableChannel;
|
||||
* @author Dave Syer
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnProperty(value = "spring.cloud.bus.enabled", matchIfMissing = true)
|
||||
@ConditionalOnBusEnabled
|
||||
public class BusAutoConfiguration {
|
||||
|
||||
public static final String SPRING_CLOUD_BUS_ENABLED = "spring.cloud.bus.enabled";
|
||||
|
||||
@Autowired
|
||||
private ConfigurableApplicationContext context;
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
@Conditional(OnBusEnabled.class)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target({ ElementType.TYPE, ElementType.METHOD })
|
||||
public @interface ConditionalOnBusEnabled {
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ 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.cloud.bus.ConditionalOnBusEnabled;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.integration.dsl.IntegrationFlow;
|
||||
@@ -23,6 +24,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnBusEnabled
|
||||
@ConditionalOnClass(AmqpTemplate.class)
|
||||
@ConditionalOnProperty(value = "spring.cloud.bus.amqp.enabled", matchIfMissing = true)
|
||||
public class AmqpBusAutoConfiguration {
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.springframework.cloud.bus.jackson;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.cloud.bus.BusAutoConfiguration;
|
||||
import org.springframework.cloud.bus.ConditionalOnBusEnabled;
|
||||
import org.springframework.cloud.bus.endpoint.RefreshBusEndpoint;
|
||||
import org.springframework.cloud.bus.event.EnvironmentChangeRemoteApplicationEvent;
|
||||
import org.springframework.cloud.bus.event.RefreshRemoteApplicationEvent;
|
||||
@@ -15,6 +16,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
@Configuration
|
||||
@ConditionalOnBusEnabled
|
||||
@ConditionalOnClass({ RefreshBusEndpoint.class, ObjectMapper.class })
|
||||
@AutoConfigureAfter(BusAutoConfiguration.class)
|
||||
public class BusJacksonAutoConfiguration {
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
package org.springframework.cloud.bus;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.ExpectedException;
|
||||
import org.springframework.boot.test.EnvironmentTestUtils;
|
||||
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
|
||||
*/
|
||||
public class ConditionalOnBusEnabledTests {
|
||||
|
||||
@Rule
|
||||
public ExpectedException thrown = ExpectedException.none();
|
||||
|
||||
private AnnotationConfigApplicationContext context;
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
if (this.context != null) {
|
||||
this.context.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void busEnabledTrue() {
|
||||
load(MyBusEnabledConfig.class, SPRING_CLOUD_BUS_ENABLED+":true");
|
||||
assertTrue("missing bean from @ConditionalOnBusEnabled config",
|
||||
this.context.containsBean("foo"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void busEnabledMissing() {
|
||||
load(MyBusEnabledConfig.class);
|
||||
assertTrue("missing bean from @ConditionalOnBusEnabled config",
|
||||
this.context.containsBean("foo"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void busDisabled() {
|
||||
load(MyBusEnabledConfig.class, SPRING_CLOUD_BUS_ENABLED+":false");
|
||||
assertFalse("bean exists from disabled @ConditionalOnBusEnabled config",
|
||||
this.context.containsBean("foo"));
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@ConditionalOnBusEnabled
|
||||
protected static class MyBusEnabledConfig {
|
||||
|
||||
@Bean
|
||||
public String foo() {
|
||||
return "foo";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void load(Class<?> config, String... environment) {
|
||||
this.context = new AnnotationConfigApplicationContext();
|
||||
EnvironmentTestUtils.addEnvironment(this.context, environment);
|
||||
this.context.register(config);
|
||||
this.context.refresh();
|
||||
}
|
||||
}
|
||||
@@ -3,9 +3,14 @@ package org.springframework.cloud.bus.amqp;
|
||||
import org.junit.Test;
|
||||
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
|
||||
import org.springframework.boot.test.EnvironmentTestUtils;
|
||||
import org.springframework.cloud.bus.BusAutoConfiguration;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.springframework.cloud.bus.BusAutoConfiguration.SPRING_CLOUD_BUS_ENABLED;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
*/
|
||||
@@ -14,8 +19,25 @@ public class AmqpBusAutoConfigurationTests {
|
||||
@Test
|
||||
public void contextStarts() throws Exception {
|
||||
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
|
||||
AmqpBusAutoConfiguration.class, RabbitAutoConfiguration.class,
|
||||
PropertyPlaceholderAutoConfiguration.class, BusAutoConfiguration.class);
|
||||
getConfigClasses());
|
||||
assertTrue(context.containsBean("cloudBusExchange"));
|
||||
context.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void notStartedIfBusDisabled() {
|
||||
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
|
||||
EnvironmentTestUtils.addEnvironment(context, SPRING_CLOUD_BUS_ENABLED+":false");
|
||||
context.register(getConfigClasses());
|
||||
context.refresh();
|
||||
|
||||
assertFalse(context.containsBean("cloudBusExchange"));
|
||||
|
||||
context.close();
|
||||
}
|
||||
|
||||
private Class[] getConfigClasses() {
|
||||
return new Class[]{AmqpBusAutoConfiguration.class, RabbitAutoConfiguration.class,
|
||||
PropertyPlaceholderAutoConfiguration.class, BusAutoConfiguration.class};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user