Skip to content

Commit 45d6a0d

Browse files
committed
Merge remote-tracking branch 'origin/main'
# Conflicts: # spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfiguration.java # spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/reactive/DeferringLoadBalancerExchangeFilterFunction.java
2 parents f92bdf7 + 9b56a8b commit 45d6a0d

File tree

3 files changed

+22
-11
lines changed

3 files changed

+22
-11
lines changed

spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerAutoConfiguration.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import org.springframework.context.annotation.Bean;
3838
import org.springframework.context.annotation.Conditional;
3939
import org.springframework.context.annotation.Configuration;
40-
import org.springframework.context.annotation.Lazy;
4140
import org.springframework.http.client.ClientHttpRequestInterceptor;
4241
import org.springframework.retry.support.RetryTemplate;
4342
import org.springframework.web.client.RestTemplate;
@@ -95,10 +94,11 @@ public static DeferringLoadBalancerInterceptor deferringLoadBalancerInterceptor(
9594

9695
@Bean
9796
@ConditionalOnBean(DeferringLoadBalancerInterceptor.class)
98-
@ConditionalOnMissingBean
99-
static LoadBalancerRestClientBuilderBeanPostProcessor lbRestClientPostProcessor(
100-
@Lazy DeferringLoadBalancerInterceptor loadBalancerInterceptor, ApplicationContext context) {
101-
return new LoadBalancerRestClientBuilderBeanPostProcessor(loadBalancerInterceptor, context);
97+
@ConditionalOnMissingBean(LoadBalancerRestClientBuilderBeanPostProcessor.class)
98+
static LoadBalancerRestClientBuilderBeanPostProcessor<DeferringLoadBalancerInterceptor> lbRestClientPostProcessor(
99+
ObjectProvider<DeferringLoadBalancerInterceptor> loadBalancerInterceptorProvider,
100+
ApplicationContext context) {
101+
return new LoadBalancerRestClientBuilderBeanPostProcessor<>(loadBalancerInterceptorProvider, context);
102102
}
103103

104104
}

spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/LoadBalancerRestClientBuilderBeanPostProcessor.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.cloud.client.loadbalancer;
1818

1919
import org.springframework.beans.BeansException;
20+
import org.springframework.beans.factory.ObjectProvider;
2021
import org.springframework.beans.factory.config.BeanPostProcessor;
2122
import org.springframework.context.ApplicationContext;
2223
import org.springframework.http.client.ClientHttpRequestInterceptor;
@@ -29,15 +30,21 @@
2930
* @author Olga Maciaszek-Sharma
3031
* @since 4.1.0
3132
*/
32-
public class LoadBalancerRestClientBuilderBeanPostProcessor implements BeanPostProcessor {
33+
public class LoadBalancerRestClientBuilderBeanPostProcessor<T extends ClientHttpRequestInterceptor>
34+
implements BeanPostProcessor {
3335

34-
private final ClientHttpRequestInterceptor loadBalancerInterceptor;
36+
private final ObjectProvider<T> loadBalancerInterceptorProvider;
3537

3638
private final ApplicationContext context;
3739

38-
public LoadBalancerRestClientBuilderBeanPostProcessor(ClientHttpRequestInterceptor loadBalancerInterceptor,
40+
public LoadBalancerRestClientBuilderBeanPostProcessor(T loadBalancerInterceptor, ApplicationContext context) {
41+
this.loadBalancerInterceptorProvider = new SimpleObjectProvider<>(loadBalancerInterceptor);
42+
this.context = context;
43+
}
44+
45+
public LoadBalancerRestClientBuilderBeanPostProcessor(ObjectProvider<T> loadBalancerInterceptorProvider,
3946
ApplicationContext context) {
40-
this.loadBalancerInterceptor = loadBalancerInterceptor;
47+
this.loadBalancerInterceptorProvider = loadBalancerInterceptorProvider;
4148
this.context = context;
4249
}
4350

@@ -47,7 +54,11 @@ public Object postProcessBeforeInitialization(Object bean, String beanName) thro
4754
if (context.findAnnotationOnBean(beanName, LoadBalanced.class) == null) {
4855
return bean;
4956
}
50-
((RestClient.Builder) bean).requestInterceptor(loadBalancerInterceptor);
57+
ClientHttpRequestInterceptor interceptor = loadBalancerInterceptorProvider.getIfAvailable();
58+
if (interceptor == null) {
59+
throw new IllegalStateException(ClientHttpRequestInterceptor.class.getSimpleName() + " not available.");
60+
}
61+
((RestClient.Builder) bean).requestInterceptor(interceptor);
5162
}
5263
return bean;
5364
}

spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/reactive/DeferringLoadBalancerExchangeFilterFunction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ void tryResolveDelegate() {
5555
if (delegate == null) {
5656
delegate = exchangeFilterFunctionProvider.getIfAvailable();
5757
if (delegate == null) {
58-
throw new IllegalStateException("LoadBalancerExchangeFilterFunction not available.");
58+
throw new IllegalStateException("LoadBalancer ExchangeFilterFunction not available.");
5959
}
6060
}
6161
}

0 commit comments

Comments
 (0)