diff --git a/spring-cloud-config-client/src/main/java/org/springframework/cloud/autoconfigure/RefreshAutoConfiguration.java b/spring-cloud-config-client/src/main/java/org/springframework/cloud/autoconfigure/RefreshAutoConfiguration.java index a3632cdc..408ddd64 100644 --- a/spring-cloud-config-client/src/main/java/org/springframework/cloud/autoconfigure/RefreshAutoConfiguration.java +++ b/spring-cloud-config-client/src/main/java/org/springframework/cloud/autoconfigure/RefreshAutoConfiguration.java @@ -109,6 +109,7 @@ public class RefreshAutoConfiguration { } @Configuration + @ConditionalOnBean(ConfigurationPropertiesBindingPostProcessor.class) protected static class ConfigurationPropertiesRebinderConfiguration { @Autowired diff --git a/spring-cloud-config-client/src/test/java/org/springframework/cloud/context/scope/refresh/RefreshScopeConfigurationIntegrationTests.java b/spring-cloud-config-client/src/test/java/org/springframework/cloud/context/scope/refresh/RefreshScopeConfigurationIntegrationTests.java index 137e8ed1..d8a40d27 100644 --- a/spring-cloud-config-client/src/test/java/org/springframework/cloud/context/scope/refresh/RefreshScopeConfigurationIntegrationTests.java +++ b/spring-cloud-config-client/src/test/java/org/springframework/cloud/context/scope/refresh/RefreshScopeConfigurationIntegrationTests.java @@ -21,57 +21,65 @@ import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; +import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.context.environment.EnvironmentManager; -import org.springframework.cloud.context.scope.refresh.RefreshScopeConfigurationIntegrationTests.ClientApp; +import org.springframework.cloud.context.scope.refresh.RefreshScopeConfigurationIntegrationTests.Application; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; /** * @author Dave Syer * */ @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = ClientApp.class) -@Ignore +@ContextConfiguration(classes = Application.class) public class RefreshScopeConfigurationIntegrationTests { @Autowired private org.springframework.cloud.context.scope.refresh.RefreshScope scope; - + @Autowired private EnvironmentManager environmentManager; - + @Autowired - private ClientApp application; + private Application application; + + @Autowired + private ConfigurableListableBeanFactory beanFactory; + + @Test + public void scopeOnBeanDefinition() throws Exception { + assertEquals("refresh", beanFactory.getBeanDefinition("scopedTarget.application") + .getScope()); + } /** * See gh-43 */ @Test + @Ignore public void beanAccess() throws Exception { // Comment out this line and it works! application.hello(); - environmentManager.setProperty("message", "Hello Dave!"); - scope.refreshAll(); + scope.refresh("application"); String message = application.hello(); - assertEquals("Hello Dave!", message); + assertEquals("Hello World", message); } - @Configuration - @EnableAutoConfiguration - @RestController + @Configuration("application") + // @Component("application") @RefreshScope - protected static class ClientApp { + @Import({ PropertyPlaceholderAutoConfiguration.class, RefreshAutoConfiguration.class }) + protected static class Application { - @Value("${message:Hello World!}") - String message; + String message = "Hello World"; @RequestMapping("/") public String hello() { @@ -79,7 +87,7 @@ public class RefreshScopeConfigurationIntegrationTests { } public static void main(String[] args) { - SpringApplication.run(ClientApp.class, args); + SpringApplication.run(Application.class, args); } } diff --git a/spring-cloud-config-client/src/test/java/org/springframework/cloud/context/scope/refresh/RefreshScopeNotConfigurationIntegrationTests.java b/spring-cloud-config-client/src/test/java/org/springframework/cloud/context/scope/refresh/RefreshScopeNotConfigurationIntegrationTests.java new file mode 100644 index 00000000..73a1b5ca --- /dev/null +++ b/spring-cloud-config-client/src/test/java/org/springframework/cloud/context/scope/refresh/RefreshScopeNotConfigurationIntegrationTests.java @@ -0,0 +1,100 @@ +/* + * Copyright 2013-2014 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.context.scope.refresh; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.cloud.context.config.annotation.RefreshScope; +import org.springframework.cloud.context.environment.EnvironmentManager; +import org.springframework.cloud.context.scope.refresh.RefreshScopeNotConfigurationIntegrationTests.Application; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author Dave Syer + * + */ +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = Application.class) +public class RefreshScopeNotConfigurationIntegrationTests { + + @Autowired + private org.springframework.cloud.context.scope.refresh.RefreshScope scope; + + @Autowired + private EnvironmentManager environmentManager; + + @Autowired + private Client application; + + @Autowired + private ConfigurableListableBeanFactory beanFactory; + + @Test + public void scopeOnBeanDefinition() throws Exception { + assertEquals("refresh", beanFactory.getBeanDefinition("scopedTarget.application").getScope()); + } + + @Test + public void beanAccess() throws Exception { + application.hello(); + environmentManager.setProperty("message", "Hello Dave!"); + scope.refreshAll(); + String message = application.hello(); + assertEquals("Hello Dave!", message); + } + + @Configuration + @EnableAutoConfiguration + protected static class Application { + + @Bean + @RefreshScope + public Client application() { + return new Client(); + } + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + } + + @RestController + protected static class Client { + + @Value("${message:Hello World!}") + String message; + + @RequestMapping("/") + public String hello() { + return message; + } + + } + +} diff --git a/spring-cloud-config-client/src/test/resources/application.properties b/spring-cloud-config-client/src/test/resources/application.properties index 1fec7abc..bae4304c 100644 --- a/spring-cloud-config-client/src/test/resources/application.properties +++ b/spring-cloud-config-client/src/test/resources/application.properties @@ -1,4 +1,5 @@ message: Hello scope! delay: 0 # debug: true -logging.level.org.springframework.web: DEBUG \ No newline at end of file +#logging.level.org.springframework.web: DEBUG +logging.level.org.springframework.context.annotation: DEBUG \ No newline at end of file