From 659433c0012e0bcc725f8440638a42e83c1cec41 Mon Sep 17 00:00:00 2001 From: Spencer Gibb Date: Wed, 4 Apr 2018 15:08:06 -0400 Subject: [PATCH] Creates RefreshListener even if actuator not on classpath. fixes gh-105 --- pom.xml | 5 ++++ spring-cloud-bus/pom.xml | 5 ++++ .../cloud/bus/BusAutoConfiguration.java | 15 +++++----- .../BusAutoConfigurationClassPathTests.java | 30 +++++++++++++++++++ 4 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 spring-cloud-bus/src/test/java/org/springframework/cloud/bus/BusAutoConfigurationClassPathTests.java diff --git a/pom.xml b/pom.xml index 4d2597c..74179cc 100644 --- a/pom.xml +++ b/pom.xml @@ -125,6 +125,11 @@ pom import + + org.springframework.cloud + spring-cloud-test-support + ${spring-cloud-commons.version} + org.springframework.cloud spring-cloud-stream-dependencies diff --git a/spring-cloud-bus/pom.xml b/spring-cloud-bus/pom.xml index ef0827f..0708230 100644 --- a/spring-cloud-bus/pom.xml +++ b/spring-cloud-bus/pom.xml @@ -49,6 +49,11 @@ spring-boot-starter-test test + + org.springframework.cloud + spring-cloud-test-support + test + org.springframework.cloud spring-cloud-stream-test-support 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 9d6dac8..77a8471 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 @@ -176,18 +176,19 @@ public class BusAutoConfiguration implements ApplicationEventPublisherAware { } + @Bean + @ConditionalOnProperty(value = "spring.cloud.bus.refresh.enabled", matchIfMissing = true) + @ConditionalOnBean(ContextRefresher.class) + public RefreshListener refreshListener(ContextRefresher contextRefresher) { + return new RefreshListener(contextRefresher); + } + @Configuration @ConditionalOnClass({ Endpoint.class, RefreshScope.class }) - @ConditionalOnBean(ContextRefresher.class) protected static class BusRefreshConfiguration { - @Bean - @ConditionalOnProperty(value = "spring.cloud.bus.refresh.enabled", matchIfMissing = true) - public RefreshListener refreshListener(ContextRefresher contextRefresher) { - return new RefreshListener(contextRefresher); - } - @Configuration + @ConditionalOnBean(ContextRefresher.class) @ConditionalOnProperty(value = "endpoints.spring.cloud.bus.refresh.enabled", matchIfMissing = true) protected static class BusRefreshEndpointConfiguration { @Bean diff --git a/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/BusAutoConfigurationClassPathTests.java b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/BusAutoConfigurationClassPathTests.java new file mode 100644 index 0000000..5c9958d --- /dev/null +++ b/spring-cloud-bus/src/test/java/org/springframework/cloud/bus/BusAutoConfigurationClassPathTests.java @@ -0,0 +1,30 @@ +package org.springframework.cloud.bus; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; +import org.springframework.cloud.bus.endpoint.RefreshBusEndpoint; +import org.springframework.cloud.bus.event.RefreshListener; +import org.springframework.cloud.test.ClassPathExclusions; +import org.springframework.cloud.test.ModifiedClassPathRunner; + +import static org.assertj.core.api.Assertions.assertThat; + + +@RunWith(ModifiedClassPathRunner.class) +@ClassPathExclusions({"spring-boot-actuator-*.jar", "spring-boot-starter-actuator-*.jar"}) +public class BusAutoConfigurationClassPathTests { + + @Test + public void refreshListenerCreatedWithoutActuator() { + new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(RefreshAutoConfiguration.class, + BusAutoConfiguration.class)) + .run(context -> assertThat(context) + .hasSingleBean(RefreshListener.class) + .doesNotHaveBean(RefreshBusEndpoint.class)); + } +}