Skip to content

Commit 10e1edf

Browse files
committed
Fix EurekaConfigServerBootstrapConfiguration.
1 parent f27b48b commit 10e1edf

9 files changed

+239
-145
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.springframework.cloud.netflix.eureka;
2+
3+
import org.springframework.boot.context.properties.ConfigurationProperties;
4+
5+
/**
6+
* @author Olga Maciaszek-Sharma
7+
*/
8+
@ConfigurationProperties("eureka.client.restclient.timeout")
9+
public class RestClientTimeoutProperties extends TimeoutProperties {
10+
11+
@Override
12+
public String toString() {
13+
return "RestClientTimeoutProperties{" + ", connectTimeout=" + connectTimeout + ", connectRequestTimeout="
14+
+ connectRequestTimeout + ", socketTimeout=" + socketTimeout + '}';
15+
}
16+
}

spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/RestTemplateTimeoutProperties.java

Lines changed: 1 addition & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -34,66 +34,11 @@
3434
* @since 3.1.6
3535
*/
3636
@ConfigurationProperties("eureka.client.rest-template-timeout")
37-
public class RestTemplateTimeoutProperties {
38-
39-
/**
40-
* Default values are set to 180000, in keeping with {@link RequestConfig} and
41-
* {@link SocketConfig} defaults.
42-
*/
43-
private int connectTimeout = 180000; // 3 * MINUTES
44-
45-
private int connectRequestTimeout = 180000; // 3 * MINUTES
46-
47-
private int socketTimeout = 180000; // 3 * MINUTES
48-
49-
public int getConnectTimeout() {
50-
return connectTimeout;
51-
}
52-
53-
public int getConnectRequestTimeout() {
54-
return connectRequestTimeout;
55-
}
56-
57-
public int getSocketTimeout() {
58-
return socketTimeout;
59-
}
60-
61-
public void setConnectTimeout(int connectTimeout) {
62-
this.connectTimeout = connectTimeout;
63-
}
64-
65-
public void setConnectRequestTimeout(int connectRequestTimeout) {
66-
this.connectRequestTimeout = connectRequestTimeout;
67-
}
68-
69-
public void setSocketTimeout(int socketTimeout) {
70-
this.socketTimeout = socketTimeout;
71-
}
72-
73-
@Override
74-
public boolean equals(Object o) {
75-
if (this == o) {
76-
return true;
77-
}
78-
if (o == null || getClass() != o.getClass()) {
79-
return false;
80-
}
81-
82-
RestTemplateTimeoutProperties that = (RestTemplateTimeoutProperties) o;
83-
84-
return connectTimeout == that.connectTimeout && connectRequestTimeout == that.connectRequestTimeout
85-
&& socketTimeout == that.socketTimeout;
86-
}
87-
88-
@Override
89-
public int hashCode() {
90-
return Objects.hash(connectTimeout, connectRequestTimeout, socketTimeout);
91-
}
37+
public class RestTemplateTimeoutProperties extends TimeoutProperties {
9238

9339
@Override
9440
public String toString() {
9541
return "RestTemplateTimeoutProperties{" + ", connectTimeout=" + connectTimeout + ", connectRequestTimeout="
9642
+ connectRequestTimeout + ", socketTimeout=" + socketTimeout + '}';
9743
}
98-
9944
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package org.springframework.cloud.netflix.eureka;
2+
3+
import java.util.Objects;
4+
5+
import org.apache.hc.client5.http.config.RequestConfig;
6+
import org.apache.hc.core5.http.io.SocketConfig;
7+
8+
/**
9+
* @author Olga Maciaszek-Sharma
10+
*/
11+
public class TimeoutProperties {
12+
13+
14+
/**
15+
* Default values are set to 180000, in keeping with {@link RequestConfig} and
16+
* {@link SocketConfig} defaults.
17+
*/
18+
protected int connectTimeout = 180000; // 3 * MINUTES
19+
20+
protected int connectRequestTimeout = 180000; // 3 * MINUTES
21+
22+
protected int socketTimeout = 180000; // 3 * MINUTES
23+
24+
public int getConnectTimeout() {
25+
return connectTimeout;
26+
}
27+
28+
public int getConnectRequestTimeout() {
29+
return connectRequestTimeout;
30+
}
31+
32+
public int getSocketTimeout() {
33+
return socketTimeout;
34+
}
35+
36+
public void setConnectTimeout(int connectTimeout) {
37+
this.connectTimeout = connectTimeout;
38+
}
39+
40+
public void setConnectRequestTimeout(int connectRequestTimeout) {
41+
this.connectRequestTimeout = connectRequestTimeout;
42+
}
43+
44+
public void setSocketTimeout(int socketTimeout) {
45+
this.socketTimeout = socketTimeout;
46+
}
47+
48+
@Override
49+
public boolean equals(Object o) {
50+
if (this == o) {
51+
return true;
52+
}
53+
if (o == null || getClass() != o.getClass()) {
54+
return false;
55+
}
56+
57+
RestTemplateTimeoutProperties that = (RestTemplateTimeoutProperties) o;
58+
59+
return connectTimeout == that.connectTimeout && connectRequestTimeout == that.connectRequestTimeout
60+
&& socketTimeout == that.socketTimeout;
61+
}
62+
63+
@Override
64+
public int hashCode() {
65+
return Objects.hash(connectTimeout, connectRequestTimeout, socketTimeout);
66+
}
67+
68+
}

spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/DiscoveryClientOptionalArgsConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.springframework.boot.web.client.RestTemplateBuilder;
3939
import org.springframework.cloud.configuration.SSLContextFactory;
4040
import org.springframework.cloud.configuration.TlsProperties;
41+
import org.springframework.cloud.netflix.eureka.RestClientTimeoutProperties;
4142
import org.springframework.cloud.netflix.eureka.RestTemplateTimeoutProperties;
4243
import org.springframework.cloud.netflix.eureka.http.DefaultEurekaClientHttpRequestFactorySupplier;
4344
import org.springframework.cloud.netflix.eureka.http.EurekaClientHttpRequestFactorySupplier;
@@ -60,7 +61,7 @@
6061
* @author Wonchul Heo
6162
*/
6263
@Configuration(proxyBeanMethods = false)
63-
@EnableConfigurationProperties(RestTemplateTimeoutProperties.class)
64+
@EnableConfigurationProperties({RestTemplateTimeoutProperties.class, RestClientTimeoutProperties.class})
6465
public class DiscoveryClientOptionalArgsConfiguration {
6566

6667
protected static final Log logger = LogFactory.getLog(DiscoveryClientOptionalArgsConfiguration.class);

spring-cloud-netflix-eureka-client/src/main/java/org/springframework/cloud/netflix/eureka/config/EurekaConfigServerBootstrapConfiguration.java

Lines changed: 85 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@
2727
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
2828
import org.springframework.boot.autoconfigure.condition.SearchStrategy;
2929
import org.springframework.boot.autoconfigure.http.codec.CodecsAutoConfiguration;
30-
import org.springframework.boot.autoconfigure.web.client.RestClientAutoConfiguration;
3130
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration;
3231
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3332
import org.springframework.boot.web.client.RestTemplateBuilder;
3433
import org.springframework.cloud.config.client.ConfigServerInstanceProvider;
3534
import org.springframework.cloud.config.client.ConfigServicePropertySourceLocator;
3635
import org.springframework.cloud.configuration.TlsProperties;
3736
import org.springframework.cloud.netflix.eureka.EurekaClientConfigBean;
37+
import org.springframework.cloud.netflix.eureka.RestClientTimeoutProperties;
3838
import org.springframework.cloud.netflix.eureka.RestTemplateTimeoutProperties;
3939
import org.springframework.cloud.netflix.eureka.http.DefaultEurekaClientHttpRequestFactorySupplier;
4040
import org.springframework.cloud.netflix.eureka.http.EurekaClientHttpRequestFactorySupplier;
@@ -63,38 +63,66 @@
6363
@ConditionalOnClass(ConfigServicePropertySourceLocator.class)
6464
@Conditional(EurekaConfigServerBootstrapConfiguration.EurekaConfigServerBootstrapCondition.class)
6565
@Configuration(proxyBeanMethods = false)
66-
@EnableConfigurationProperties(RestTemplateTimeoutProperties.class)
6766
public class EurekaConfigServerBootstrapConfiguration {
6867

69-
@Bean
70-
@ConditionalOnMissingBean(value = EurekaClientConfig.class, search = SearchStrategy.CURRENT)
71-
public EurekaClientConfigBean eurekaClientConfigBean() {
72-
return new EurekaClientConfigBean();
73-
}
7468

75-
@Bean
76-
@ConditionalOnMissingBean(EurekaHttpClient.class)
77-
@Conditional(RestTemplateEnabledCondition.class)
78-
public RestTemplateEurekaHttpClient configDiscoveryRestTemplateEurekaHttpClient(EurekaClientConfigBean config,
79-
Environment env, @Nullable TlsProperties properties,
80-
EurekaClientHttpRequestFactorySupplier eurekaClientHttpRequestFactorySupplier,
81-
ObjectProvider<RestTemplateBuilder> restTemplateBuilders) {
82-
return (RestTemplateEurekaHttpClient) new RestTemplateTransportClientFactory(properties,
83-
eurekaClientHttpRequestFactorySupplier, restTemplateBuilders::getIfAvailable)
84-
.newClient(HostnameBasedUrlRandomizer.randomEndpoint(config, env));
85-
}
69+
@Configuration(proxyBeanMethods = false)
70+
@ConditionalOnClass(name = "org.springframework.web.client.RestTemplate")
71+
@Conditional(RestTemplateConfiguration.RestTemplateEnabledCondition.class)
72+
@EnableConfigurationProperties(RestTemplateTimeoutProperties.class)
73+
static class RestTemplateConfiguration {
8674

87-
@Bean
88-
@ConditionalOnMissingBean
89-
EurekaClientHttpRequestFactorySupplier defaultEurekaClientHttpRequestFactorySupplier(
90-
RestTemplateTimeoutProperties restTemplateTimeoutProperties) {
91-
return new DefaultEurekaClientHttpRequestFactorySupplier(restTemplateTimeoutProperties);
92-
}
75+
@Bean
76+
@ConditionalOnMissingBean(value = EurekaClientConfig.class, search = SearchStrategy.CURRENT)
77+
public EurekaClientConfigBean eurekaClientConfigBean() {
78+
return new EurekaClientConfigBean();
79+
}
80+
81+
@Bean
82+
@ConditionalOnMissingBean(EurekaHttpClient.class)
83+
@Conditional(RestTemplateEnabledCondition.class)
84+
public RestTemplateEurekaHttpClient configDiscoveryRestTemplateEurekaHttpClient(EurekaClientConfigBean config,
85+
Environment env, @Nullable TlsProperties properties,
86+
EurekaClientHttpRequestFactorySupplier eurekaClientHttpRequestFactorySupplier,
87+
ObjectProvider<RestTemplateBuilder> restTemplateBuilders) {
88+
return (RestTemplateEurekaHttpClient) new RestTemplateTransportClientFactory(properties,
89+
eurekaClientHttpRequestFactorySupplier, restTemplateBuilders::getIfAvailable)
90+
.newClient(HostnameBasedUrlRandomizer.randomEndpoint(config, env));
91+
}
92+
93+
@Bean
94+
@ConditionalOnMissingBean
95+
@Conditional(RestTemplateEnabledCondition.class)
96+
EurekaClientHttpRequestFactorySupplier defaultEurekaClientHttpRequestFactorySupplier(
97+
RestTemplateTimeoutProperties restTemplateTimeoutProperties) {
98+
return new DefaultEurekaClientHttpRequestFactorySupplier(restTemplateTimeoutProperties);
99+
}
100+
101+
@Bean
102+
public ConfigServerInstanceProvider.Function eurekaConfigServerInstanceProvider(EurekaHttpClient client,
103+
EurekaClientConfig config) {
104+
return new EurekaConfigServerInstanceProvider(client, config)::getInstances;
105+
}
106+
107+
static class RestTemplateEnabledCondition extends AllNestedConditions {
108+
109+
RestTemplateEnabledCondition() {
110+
super(ConfigurationPhase.REGISTER_BEAN);
111+
}
112+
113+
@ConditionalOnProperty(prefix = "eureka.client", name = "webclient.enabled", matchIfMissing = true,
114+
havingValue = "false")
115+
static class OnWebClientDisabled {
116+
117+
}
118+
119+
@ConditionalOnProperty(prefix = "eureka.client", name = "restclient.enabled", havingValue = "false")
120+
static class OnRestClientDisabled {
121+
122+
}
123+
124+
}
93125

94-
@Bean
95-
public ConfigServerInstanceProvider.Function eurekaConfigServerInstanceProvider(EurekaHttpClient client,
96-
EurekaClientConfig config) {
97-
return new EurekaConfigServerInstanceProvider(client, config)::getInstances;
98126
}
99127

100128
@Configuration(proxyBeanMethods = false)
@@ -115,54 +143,53 @@ public WebClientEurekaHttpClient configDiscoveryWebClientEurekaHttpClient(Eureka
115143

116144
@Configuration(proxyBeanMethods = false)
117145
@ConditionalOnClass(name = "org.springframework.web.client.RestClient")
118-
@Conditional(RestClientEnabledCondition.class)
119-
@ImportAutoConfiguration(RestClientAutoConfiguration.class)
120-
protected static class RestClientConfiguration {
146+
@Conditional(RestClientConfiguration.RestClientEnabledCondition.class)
147+
@EnableConfigurationProperties(RestClientTimeoutProperties.class)
148+
static class RestClientConfiguration {
121149

122150
@Bean
123151
@ConditionalOnMissingBean(EurekaHttpClient.class)
124152
public RestClientEurekaHttpClient configDiscoveryRestClientEurekaHttpClient(EurekaClientConfigBean config,
153+
@Nullable TlsProperties properties,
154+
EurekaClientHttpRequestFactorySupplier eurekaClientHttpRequestFactorySupplier,
125155
ObjectProvider<RestClient.Builder> builder, Environment env) {
126-
return (RestClientEurekaHttpClient) new RestClientTransportClientFactory(builder::getIfAvailable)
156+
return (RestClientEurekaHttpClient) new RestClientTransportClientFactory(properties,
157+
eurekaClientHttpRequestFactorySupplier,
158+
builder::getIfAvailable)
127159
.newClient(HostnameBasedUrlRandomizer.randomEndpoint(config, env));
128160
}
129161

130-
}
131-
132-
static class RestTemplateEnabledCondition extends AllNestedConditions {
133-
134-
RestTemplateEnabledCondition() {
135-
super(ConfigurationPhase.REGISTER_BEAN);
162+
@Bean
163+
@ConditionalOnMissingBean
164+
EurekaClientHttpRequestFactorySupplier defaultEurekaClientHttpRequestFactorySupplier(
165+
RestClientTimeoutProperties restClientTimeoutProperties) {
166+
return new DefaultEurekaClientHttpRequestFactorySupplier(restClientTimeoutProperties);
136167
}
137168

138-
@ConditionalOnProperty(prefix = "eureka.client", name = "webclient.enabled", matchIfMissing = true,
139-
havingValue = "false")
140-
static class OnWebClientDisabled {
141-
169+
@Bean
170+
@ConditionalOnMissingBean(value = EurekaClientConfig.class, search = SearchStrategy.CURRENT)
171+
public EurekaClientConfigBean eurekaClientConfigBean() {
172+
return new EurekaClientConfigBean();
142173
}
143174

144-
@ConditionalOnProperty(prefix = "eureka.client", name = "restclient.enabled", havingValue = "false")
145-
static class OnRestClientDisabled {
146175

147-
}
176+
static class RestClientEnabledCondition extends AllNestedConditions {
148177

149-
}
178+
RestClientEnabledCondition() {
179+
super(ConfigurationPhase.REGISTER_BEAN);
180+
}
150181

151-
static class RestClientEnabledCondition extends AllNestedConditions {
182+
@ConditionalOnProperty(prefix = "eureka.client", name = "webclient.enabled", matchIfMissing = true,
183+
havingValue = "false")
184+
static class OnWebClientDisabled {
152185

153-
RestClientEnabledCondition() {
154-
super(ConfigurationPhase.REGISTER_BEAN);
155-
}
186+
}
156187

157-
@ConditionalOnProperty(prefix = "eureka.client", name = "webclient.enabled", matchIfMissing = true,
158-
havingValue = "false")
159-
static class OnWebClientDisabled {
160-
161-
}
188+
@ConditionalOnProperty(prefix = "eureka.client", name = "restclient.enabled", matchIfMissing = true,
189+
havingValue = "true")
190+
static class OnRestClientEnabled {
162191

163-
@ConditionalOnProperty(prefix = "eureka.client", name = "restclient.enabled", matchIfMissing = true,
164-
havingValue = "true")
165-
static class OnRestClientEnabled {
192+
}
166193

167194
}
168195

0 commit comments

Comments
 (0)