Skip to content

Commit 87bb8f1

Browse files
committed
Upgrades to build 2.1.0.BUILD-SNAPSHOT and boot 2.1.x
Moves refresh scope proxy creation from BeanDefinitionRegistryPostProcessor to BeanPostProcessor fixes spring-projectsgh-400
1 parent 69181c1 commit 87bb8f1

File tree

18 files changed

+67
-51
lines changed

18 files changed

+67
-51
lines changed

docs/pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
<parent>
99
<groupId>org.springframework.cloud</groupId>
1010
<artifactId>spring-cloud-commons-parent</artifactId>
11-
<version>2.0.2.BUILD-SNAPSHOT</version>
11+
<version>2.1.0.BUILD-SNAPSHOT</version>
1212
</parent>
1313
<packaging>pom</packaging>
1414
<name>Spring Cloud Commons Docs</name>
1515
<description>Spring Cloud Commons Docs</description>
1616
<properties>
1717
<docs.main>spring-cloud-commons</docs.main>
1818
<main.basedir>${basedir}/..</main.basedir>
19-
<docs.whitelisted.branches>1.1.x,1.2.x,1.3.x</docs.whitelisted.branches>
19+
<docs.whitelisted.branches>1.2.x,1.3.x,2.0.x</docs.whitelisted.branches>
2020
</properties>
2121
<build>
2222
<plugins>

pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>org.springframework.cloud</groupId>
55
<artifactId>spring-cloud-commons-parent</artifactId>
6-
<version>2.0.2.BUILD-SNAPSHOT</version>
6+
<version>2.1.0.BUILD-SNAPSHOT</version>
77
<packaging>pom</packaging>
88
<name>Spring Cloud Commons Parent</name>
99
<description>Spring Cloud Commons Parent</description>
1010
<url>https://projects.spring.io/spring-cloud/</url>
1111
<parent>
1212
<groupId>org.springframework.cloud</groupId>
1313
<artifactId>spring-cloud-build</artifactId>
14-
<version>2.0.3.RELEASE</version>
14+
<version>2.1.0.BUILD-SNAPSHOT</version>
1515
<relativePath/> <!-- lookup parent from repository -->
1616
</parent>
1717
<scm>

spring-cloud-commons-dependencies/pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
<parent>
66
<artifactId>spring-cloud-dependencies-parent</artifactId>
77
<groupId>org.springframework.cloud</groupId>
8-
<version>2.0.3.RELEASE</version>
8+
<version>2.1.0.BUILD-SNAPSHOT</version>
99
<relativePath/>
1010
</parent>
1111
<artifactId>spring-cloud-commons-dependencies</artifactId>
12-
<version>2.0.2.BUILD-SNAPSHOT</version>
12+
<version>2.1.0.BUILD-SNAPSHOT</version>
1313
<packaging>pom</packaging>
1414
<name>spring-cloud-commons-dependencies</name>
1515
<description>Spring Cloud Commons Dependencies</description>

spring-cloud-commons/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>org.springframework.cloud</groupId>
88
<artifactId>spring-cloud-commons-parent</artifactId>
9-
<version>2.0.2.BUILD-SNAPSHOT</version>
9+
<version>2.1.0.BUILD-SNAPSHOT</version>
1010
<relativePath>..</relativePath>
1111
</parent>
1212
<artifactId>spring-cloud-commons</artifactId>

spring-cloud-commons/src/test/java/org/springframework/cloud/client/CommonsClientAutoConfigurationTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.junit.Test;
44
import org.springframework.beans.BeansException;
5+
import org.springframework.boot.WebApplicationType;
56
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
67
import org.springframework.boot.builder.SpringApplicationBuilder;
78
import org.springframework.cloud.client.actuator.FeaturesEndpoint;
@@ -81,7 +82,7 @@ private void assertBeanNonExistant(ConfigurableApplicationContext ctxt,
8182
}
8283

8384
protected ConfigurableApplicationContext init(String... pairs) {
84-
return new SpringApplicationBuilder().web(false).sources(Config.class)
85+
return new SpringApplicationBuilder().web(WebApplicationType.NONE).sources(Config.class)
8586
.properties(pairs).run();
8687
}
8788

spring-cloud-commons/src/test/java/org/springframework/cloud/client/discovery/EnableDiscoveryClientMissingImplTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.springframework.cloud.client.discovery;
22

33
import org.junit.Test;
4+
import org.springframework.boot.WebApplicationType;
45
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
56
import org.springframework.boot.builder.SpringApplicationBuilder;
67
import org.springframework.context.ConfigurableApplicationContext;
@@ -19,7 +20,7 @@ public class EnableDiscoveryClientMissingImplTests {
1920
@Test
2021
public void testContextFails() {
2122
try (ConfigurableApplicationContext context = new SpringApplicationBuilder()
22-
.sources(App.class).web(false).run(new String[0]);) {
23+
.sources(App.class).web(WebApplicationType.NONE).run(new String[0]);) {
2324
}
2425
catch (NestedRuntimeException e) {
2526
Throwable rootCause = e.getRootCause();

spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/AbstractLoadBalancerAutoConfigurationTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
import org.junit.Test;
3333
import org.springframework.beans.factory.annotation.Autowired;
34+
import org.springframework.boot.WebApplicationType;
3435
import org.springframework.boot.builder.SpringApplicationBuilder;
3536
import org.springframework.cloud.client.DefaultServiceInstance;
3637
import org.springframework.cloud.client.ServiceInstance;
@@ -81,7 +82,7 @@ public void multipleRestTemplates() {
8182
}
8283

8384
protected ConfigurableApplicationContext init(Class<?> config) {
84-
return new SpringApplicationBuilder().web(false)
85+
return new SpringApplicationBuilder().web(WebApplicationType.NONE)
8586
.properties("spring.aop.proxyTargetClass=true")
8687
.sources(config, LoadBalancerAutoConfiguration.class).run();
8788
}

spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/AsyncLoadBalancerAutoConfigurationTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.hamcrest.MatcherAssert;
2020
import org.junit.Test;
2121
import org.springframework.beans.factory.annotation.Autowired;
22+
import org.springframework.boot.WebApplicationType;
2223
import org.springframework.boot.builder.SpringApplicationBuilder;
2324
import org.springframework.cloud.client.DefaultServiceInstance;
2425
import org.springframework.cloud.client.ServiceInstance;
@@ -89,7 +90,7 @@ public void multipleRestTemplates() {
8990
}
9091

9192
protected ConfigurableApplicationContext init(Class<?> config) {
92-
return new SpringApplicationBuilder().web(false)
93+
return new SpringApplicationBuilder().web(WebApplicationType.NONE)
9394
.properties("spring.aop.proxyTargetClass=true")
9495
.sources(config, AsyncLoadBalancerAutoConfiguration.class).run();
9596
}

spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRequestFactoryConfigurationTests.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.mockito.ArgumentCaptor;
2929
import org.mockito.Mock;
3030
import org.mockito.runners.MockitoJUnitRunner;
31+
import org.springframework.boot.WebApplicationType;
3132
import org.springframework.boot.builder.SpringApplicationBuilder;
3233
import org.springframework.cloud.client.ServiceInstance;
3334
import org.springframework.context.ConfigurableApplicationContext;
@@ -62,7 +63,7 @@ public void setup() {
6263
}
6364

6465
protected ConfigurableApplicationContext init(Class<?> config) {
65-
ConfigurableApplicationContext context = new SpringApplicationBuilder().web(false)
66+
ConfigurableApplicationContext context = new SpringApplicationBuilder().web(WebApplicationType.NONE)
6667
.properties("spring.aop.proxyTargetClass=true")
6768
.sources(config, LoadBalancerAutoConfiguration.class).run();
6869

spring-cloud-commons/src/test/java/org/springframework/cloud/client/serviceregistry/AutoServiceRegistrationAutoConfigurationTests.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
import org.junit.Rule;
99
import org.junit.Test;
1010
import org.junit.rules.ExpectedException;
11+
1112
import org.springframework.beans.factory.BeanCreationException;
12-
import org.springframework.boot.test.util.EnvironmentTestUtils;
13+
import org.springframework.boot.test.util.TestPropertyValues;
1314
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
1415
import org.springframework.context.annotation.Bean;
1516
import org.springframework.context.annotation.Configuration;
@@ -74,7 +75,7 @@ private AnnotationConfigApplicationContext setup(String property, Class... class
7475
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
7576
context.register(list.toArray(new Class[0]));
7677
if (StringUtils.hasText(property)) {
77-
EnvironmentTestUtils.addEnvironment(context, property);
78+
TestPropertyValues.of(property).applyTo(context);
7879
}
7980
context.refresh();
8081
return context;

spring-cloud-context-integration-tests/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>org.springframework.cloud</groupId>
88
<artifactId>spring-cloud-commons-parent</artifactId>
9-
<version>2.0.2.BUILD-SNAPSHOT</version>
9+
<version>2.1.0.BUILD-SNAPSHOT</version>
1010
<relativePath>..</relativePath>
1111
</parent>
1212
<artifactId>spring-cloud-context-integration-tests</artifactId>

spring-cloud-context-integration-tests/src/test/java/org/springframework/cloud/autoconfigure/RefreshScopeIntegrationTests.java

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949

5050
@RunWith(SpringRunner.class)
5151
@SpringBootTest(classes = TestConfiguration.class)
52+
@SuppressWarnings("Duplicates")
5253
public class RefreshScopeIntegrationTests {
5354

5455
@Autowired

spring-cloud-context/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>org.springframework.cloud</groupId>
88
<artifactId>spring-cloud-commons-parent</artifactId>
9-
<version>2.0.2.BUILD-SNAPSHOT</version>
9+
<version>2.1.0.BUILD-SNAPSHOT</version>
1010
<relativePath>..</relativePath>
1111
</parent>
1212
<artifactId>spring-cloud-context</artifactId>

spring-cloud-context/src/main/java/org/springframework/cloud/autoconfigure/RefreshAutoConfiguration.java

+36-27
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,14 @@
2323

2424
import javax.annotation.PostConstruct;
2525

26-
import org.springframework.aop.scope.ScopedProxyUtils;
26+
import org.springframework.aop.framework.ProxyFactory;
2727
import org.springframework.beans.BeansException;
2828
import org.springframework.beans.factory.BeanFactory;
2929
import org.springframework.beans.factory.ListableBeanFactory;
30+
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
3031
import org.springframework.beans.factory.annotation.Autowired;
3132
import org.springframework.beans.factory.config.BeanDefinition;
32-
import org.springframework.beans.factory.config.BeanDefinitionHolder;
33+
import org.springframework.beans.factory.config.BeanPostProcessor;
3334
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
3435
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
3536
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
@@ -62,10 +63,14 @@
6263
*/
6364
@Configuration
6465
@ConditionalOnClass(RefreshScope.class)
65-
@ConditionalOnProperty(name = "spring.cloud.refresh.enabled", matchIfMissing = true)
66+
@ConditionalOnProperty(name = RefreshAutoConfiguration.REFRESH_SCOPE_ENABLED, matchIfMissing = true)
6667
@AutoConfigureBefore(HibernateJpaAutoConfiguration.class)
6768
public class RefreshAutoConfiguration {
6869

70+
public static final String REFRESH_SCOPE_NAME = "refresh";
71+
public static final String REFRESH_SCOPE_PREFIX = "spring.cloud.refresh";
72+
public static final String REFRESH_SCOPE_ENABLED = REFRESH_SCOPE_PREFIX + ".enabled";
73+
6974
@Bean
7075
@ConditionalOnMissingBean(RefreshScope.class)
7176
public static RefreshScope refreshScope() {
@@ -95,7 +100,9 @@ public void setLoadTimeWeaver(LoadTimeWeaver ltw) {
95100

96101
@Component
97102
protected static class RefreshScopeBeanDefinitionEnhancer
98-
implements BeanDefinitionRegistryPostProcessor {
103+
implements BeanPostProcessor, BeanDefinitionRegistryPostProcessor {
104+
105+
private BeanDefinitionRegistry registry;
99106

100107
/**
101108
* Class names for beans to post process into refresh scope. Useful when you don't
@@ -104,8 +111,6 @@ protected static class RefreshScopeBeanDefinitionEnhancer
104111
private Set<String> refreshables = new HashSet<>(
105112
Arrays.asList("com.zaxxer.hikari.HikariDataSource"));
106113

107-
private Environment environment;
108-
109114
public Set<String> getRefreshable() {
110115
return this.refreshables;
111116
}
@@ -124,29 +129,42 @@ public void setExtraRefreshable(Set<String> refreshables) {
124129
@Override
125130
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
126131
throws BeansException {
132+
Environment environment = beanFactory.getBean(Environment.class);
133+
if (environment == null) {
134+
environment = new StandardEnvironment();
135+
}
136+
Binder.get(environment).bind(REFRESH_SCOPE_PREFIX, Bindable.ofInstance(this));
127137
}
128138

129139
@Override
130140
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)
131141
throws BeansException {
132-
for (String name : registry.getBeanDefinitionNames()) {
133-
BeanDefinition definition = registry.getBeanDefinition(name);
134-
if (isApplicable(registry, name, definition)) {
135-
BeanDefinitionHolder holder = new BeanDefinitionHolder(definition,
136-
name);
137-
BeanDefinitionHolder proxy = ScopedProxyUtils
138-
.createScopedProxy(holder, registry, true);
139-
definition.setScope("refresh");
140-
registry.registerBeanDefinition(proxy.getBeanName(),
141-
proxy.getBeanDefinition());
142-
}
142+
this.registry = registry;
143+
}
144+
145+
@Override
146+
public Object postProcessAfterInitialization(Object bean, String beanName)
147+
throws BeansException {
148+
BeanDefinition definition = null;
149+
try {
150+
definition = registry.getBeanDefinition(beanName);
151+
}
152+
catch (NoSuchBeanDefinitionException e) {
153+
// just ignore and move on
154+
return bean;
143155
}
156+
if (isApplicable(registry, beanName, definition)) {
157+
definition.setScope(REFRESH_SCOPE_NAME);
158+
ProxyFactory proxyFactory = new ProxyFactory(bean);
159+
return proxyFactory.getProxy();
160+
}
161+
return bean;
144162
}
145163

146164
private boolean isApplicable(BeanDefinitionRegistry registry, String name,
147165
BeanDefinition definition) {
148166
String scope = definition.getScope();
149-
if ("refresh".equals(scope)) {
167+
if (REFRESH_SCOPE_NAME.equals(scope)) {
150168
// Already refresh scoped
151169
return false;
152170
}
@@ -158,15 +176,6 @@ private boolean isApplicable(BeanDefinitionRegistry registry, String name,
158176
}
159177
}
160178
if (type != null) {
161-
if (this.environment == null && registry instanceof BeanFactory) {
162-
this.environment = ((BeanFactory) registry)
163-
.getBean(Environment.class);
164-
}
165-
if (this.environment == null) {
166-
this.environment = new StandardEnvironment();
167-
}
168-
Binder.get(environment).bind("spring.cloud.refresh",
169-
Bindable.ofInstance(this));
170179
return this.refreshables.contains(type);
171180
}
172181
return false;

spring-cloud-context/src/test/java/org/springframework/cloud/autoconfigure/RefreshAutoConfigurationTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ private static ConfigurableApplicationContext getApplicationContext(
6969

7070
@Configuration
7171
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
72-
@EnableConfigurationProperties(ConfigProps.class)
72+
@EnableConfigurationProperties
7373
static class Config {
7474

7575
}

spring-cloud-context/src/test/java/org/springframework/cloud/context/refresh/ContextRefresherTests.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void close() {
3838
@Test
3939
public void orderNewPropertiesConsistentWithNewContext() {
4040
try (ConfigurableApplicationContext context = SpringApplication.run(Empty.class,
41-
"--spring.main.webEnvironment=false", "--debug=false",
41+
"--spring.main.web-application-type=none", "--debug=false",
4242
"--spring.main.bannerMode=OFF")) {
4343
context.getEnvironment().setActiveProfiles("refresh");
4444
List<String> names = names(context.getEnvironment().getPropertySources());
@@ -61,7 +61,7 @@ public void bootstrapPropertySourceAlwaysFirst() {
6161
// Use spring.cloud.bootstrap.name to switch off the defaults (which would pick up
6262
// a bootstrapProperties immediately
6363
try (ConfigurableApplicationContext context = SpringApplication.run(Empty.class,
64-
"--spring.main.webEnvironment=false", "--debug=false",
64+
"--spring.main.web-application-type=none", "--debug=false",
6565
"--spring.main.bannerMode=OFF",
6666
"--spring.cloud.bootstrap.name=refresh")) {
6767
List<String> names = names(context.getEnvironment().getPropertySources());
@@ -82,7 +82,7 @@ public void parentContextIsClosed() {
8282
// Use spring.cloud.bootstrap.name to switch off the defaults (which would pick up
8383
// a bootstrapProperties immediately
8484
try (ConfigurableApplicationContext context = SpringApplication.run(
85-
ContextRefresherTests.class, "--spring.main.webEnvironment=false",
85+
ContextRefresherTests.class, "--spring.main.web-application-type=none",
8686
"--debug=false", "--spring.main.bannerMode=OFF",
8787
"--spring.cloud.bootstrap.name=refresh")) {
8888
ContextRefresher refresher = new ContextRefresher(context, scope);
@@ -107,7 +107,7 @@ public void loggingSystemNotInitialized() {
107107
.get(getClass().getClassLoader());
108108
assertThat(system.getCount()).isEqualTo(0);
109109
try (ConfigurableApplicationContext context = SpringApplication.run(Empty.class,
110-
"--spring.main.webEnvironment=false", "--debug=false",
110+
"--spring.main.web-application-type=none", "--debug=false",
111111
"--spring.main.bannerMode=OFF",
112112
"--spring.cloud.bootstrap.name=refresh")) {
113113
assertThat(system.getCount()).isEqualTo(4);
@@ -123,7 +123,7 @@ public void commandLineArgsPassedToBootstrapConfiguration() {
123123
TestBootstrapConfiguration.fooSightings = new ArrayList<>();
124124

125125
try (ConfigurableApplicationContext context = SpringApplication.run(ContextRefresherTests.class,
126-
"--spring.main.webEnvironment=false", "--debug=false",
126+
"--spring.main.web-application-type=none", "--debug=false",
127127
"--spring.main.bannerMode=OFF",
128128
"--spring.cloud.bootstrap.name=refresh",
129129
"--test.bootstrap.foo=bar")) {

spring-cloud-starter/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.springframework.cloud</groupId>
77
<artifactId>spring-cloud-commons-parent</artifactId>
8-
<version>2.0.2.BUILD-SNAPSHOT</version>
8+
<version>2.1.0.BUILD-SNAPSHOT</version>
99
</parent>
1010
<artifactId>spring-cloud-starter</artifactId>
1111
<name>spring-cloud-starter</name>

spring-cloud-test-support/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>org.springframework.cloud</groupId>
88
<artifactId>spring-cloud-commons-parent</artifactId>
9-
<version>2.0.2.BUILD-SNAPSHOT</version>
9+
<version>2.1.0.BUILD-SNAPSHOT</version>
1010
<relativePath>..</relativePath>
1111
</parent>
1212
<artifactId>spring-cloud-test-support</artifactId>

0 commit comments

Comments
 (0)