diff --git a/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/LifecycleMvcEndpointAutoConfiguration.java b/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/LifecycleMvcEndpointAutoConfiguration.java index fb581ba8..72be149e 100644 --- a/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/LifecycleMvcEndpointAutoConfiguration.java +++ b/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/LifecycleMvcEndpointAutoConfiguration.java @@ -20,12 +20,14 @@ import org.springframework.boot.actuate.env.EnvironmentEndpoint; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.cloud.context.environment.EnvironmentManager; import org.springframework.cloud.context.environment.EnvironmentWebEndpointExtension; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.ConfigurableEnvironment; /** * Autoconfiguration for some MVC endpoints governing the application context lifecycle. @@ -36,18 +38,27 @@ import org.springframework.context.annotation.Configuration; * */ @Configuration -@ConditionalOnClass(EnvironmentEndpoint.class) -@ConditionalOnWebApplication @AutoConfigureAfter({ WebMvcAutoConfiguration.class, RefreshEndpointAutoConfiguration.class }) public class LifecycleMvcEndpointAutoConfiguration { - @Bean - @ConditionalOnBean(EnvironmentEndpoint.class) - @ConditionalOnEnabledEndpoint - public EnvironmentWebEndpointExtension environmentWebEndpointExtension( - EnvironmentManager environment) { - return new EnvironmentWebEndpointExtension(environment); - } + @Bean + @ConditionalOnMissingBean + public EnvironmentManager environmentManager(ConfigurableEnvironment environment) { + return new EnvironmentManager(environment); + } + + @Configuration + @ConditionalOnClass(EnvironmentEndpoint.class) + @ConditionalOnWebApplication + protected static class EndpointConfiguration { + @Bean + @ConditionalOnBean(EnvironmentEndpoint.class) + @ConditionalOnEnabledEndpoint + public EnvironmentWebEndpointExtension environmentWebEndpointExtension( + EnvironmentManager environment) { + return new EnvironmentWebEndpointExtension(environment); + } + } } diff --git a/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshAutoConfiguration.java b/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshAutoConfiguration.java index c55e6386..de601fd8 100644 --- a/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshAutoConfiguration.java +++ b/spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshAutoConfiguration.java @@ -79,12 +79,6 @@ public class RefreshAutoConfiguration { return new LoggingRebinder(); } - @Bean - @ConditionalOnMissingBean - public EnvironmentManager environmentManager(ConfigurableEnvironment environment) { - return new EnvironmentManager(environment); - } - @Bean @ConditionalOnMissingBean public ContextRefresher contextRefresher(ConfigurableApplicationContext context, diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationTests.java b/spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationTests.java index 657b5427..f7c072c2 100644 --- a/spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationTests.java +++ b/spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationTests.java @@ -24,7 +24,7 @@ public class RefreshAutoConfigurationTests { @Test public void noWarnings() { try (ConfigurableApplicationContext context = getApplicationContext( - Config.class)) { + WebApplicationType.NONE, Config.class)) { assertThat(context.containsBean("refreshScope")).isTrue(); assertThat(output.toString()).doesNotContain("WARN"); } @@ -33,14 +33,14 @@ public class RefreshAutoConfigurationTests { @Test public void disabled() { try (ConfigurableApplicationContext context = getApplicationContext( - Config.class, "spring.cloud.refresh.enabled:false")) { + WebApplicationType.SERVLET, Config.class, "spring.cloud.refresh.enabled:false")) { assertThat(context.containsBean("refreshScope")).isFalse(); } } private static ConfigurableApplicationContext getApplicationContext( - Class configuration, String... properties) { - return new SpringApplicationBuilder(configuration).web(WebApplicationType.NONE).properties(properties).run(); + WebApplicationType type, Class configuration, String... properties) { + return new SpringApplicationBuilder(configuration).web(type).properties(properties).run(); } @Configuration diff --git a/spring-cloud-context/src/test/java/org/springframework/cloud/context/scope/refresh/RefreshScopeConfigurationTests.java b/spring-cloud-context/src/test/java/org/springframework/cloud/context/scope/refresh/RefreshScopeConfigurationTests.java index 719353d4..46ecce5f 100644 --- a/spring-cloud-context/src/test/java/org/springframework/cloud/context/scope/refresh/RefreshScopeConfigurationTests.java +++ b/spring-cloud-context/src/test/java/org/springframework/cloud/context/scope/refresh/RefreshScopeConfigurationTests.java @@ -23,6 +23,7 @@ import org.junit.rules.ExpectedException; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; +import org.springframework.cloud.autoconfigure.LifecycleMvcEndpointAutoConfiguration; import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.context.environment.EnvironmentManager; @@ -66,7 +67,7 @@ public class RefreshScopeConfigurationTests { @Test public void configurationWithRefreshScope() throws Exception { context = new AnnotationConfigApplicationContext(Application.class, - PropertyPlaceholderAutoConfiguration.class, RefreshAutoConfiguration.class); + PropertyPlaceholderAutoConfiguration.class, RefreshAutoConfiguration.class, LifecycleMvcEndpointAutoConfiguration.class); Application application = context.getBean(Application.class); assertEquals("refresh", context.getBeanDefinition("scopedTarget.application").getScope()); application.hello(); @@ -78,7 +79,7 @@ public class RefreshScopeConfigurationTests { @Test public void refreshScopeOnBean() throws Exception { context = new AnnotationConfigApplicationContext(ClientApp.class, - PropertyPlaceholderAutoConfiguration.class, RefreshAutoConfiguration.class); + PropertyPlaceholderAutoConfiguration.class, RefreshAutoConfiguration.class, LifecycleMvcEndpointAutoConfiguration.class); Controller application = context.getBean(Controller.class); application.hello(); refresh(); @@ -89,7 +90,7 @@ public class RefreshScopeConfigurationTests { @Test public void refreshScopeOnNested() throws Exception { context = new AnnotationConfigApplicationContext(NestedApp.class, - PropertyPlaceholderAutoConfiguration.class, RefreshAutoConfiguration.class); + PropertyPlaceholderAutoConfiguration.class, RefreshAutoConfiguration.class, LifecycleMvcEndpointAutoConfiguration.class); NestedController application = context.getBean(NestedController.class); application.hello(); refresh();