diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClient.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClient.java index bbab499f..d3213466 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClient.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClient.java @@ -67,6 +67,7 @@ import static org.springframework.cloud.openfeign.loadbalancer.LoadBalancerUtils * * @author Olga Maciaszek-Sharma * @author changjin wei(魏昌进) + * @author Wonsik Cheung * @since 2.2.6 */ @SuppressWarnings({ "rawtypes", "unchecked" }) @@ -184,6 +185,7 @@ public class RetryableFeignBlockingLoadBalancerClient implements Client { } org.springframework.cloud.client.loadbalancer.Response lbResponse = new DefaultResponse( retrievedServiceInstance); + LoadBalancerProperties loadBalancerProperties = loadBalancerClientFactory.getProperties(serviceId); Response response = LoadBalancerUtils.executeWithLoadBalancerLifecycleProcessing(delegate, options, feignRequest, lbRequest, lbResponse, supportedLifecycleProcessors, retrievedServiceInstance != null); @@ -231,8 +233,10 @@ public class RetryableFeignBlockingLoadBalancerClient implements Client { retryTemplate.setListeners(retryListeners); } - retryTemplate.setRetryPolicy(retryPolicy == null ? new NeverRetryPolicy() - : new InterceptorRetryPolicy(toHttpRequest(request), retryPolicy, loadBalancerClient, serviceId)); + retryTemplate.setRetryPolicy( + !loadBalancerClientFactory.getProperties(serviceId).getRetry().isEnabled() || retryPolicy == null + ? new NeverRetryPolicy() : new InterceptorRetryPolicy(toHttpRequest(request), retryPolicy, + loadBalancerClient, serviceId)); return retryTemplate; } diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClientTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClientTests.java index 5a1dae99..855cfc2e 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClientTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClientTests.java @@ -57,6 +57,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; @@ -73,6 +74,7 @@ import static org.mockito.Mockito.when; * * @author Olga Maciaszek-Sharma * @author changjin wei(魏昌进) + * @author Wonsik Cheung * @see BlockingLoadBalancerClientTests */ @@ -166,6 +168,20 @@ class RetryableFeignBlockingLoadBalancerClientTests { verify(delegate, times(2)).execute(any(), any()); } + @Test + void shouldNotRetryOnDisabled() throws IOException { + properties.getRetry().setEnabled(false); + Request request = testRequest(); + when(delegate.execute(any(), any())).thenThrow(new IOException()); + when(retryFactory.createRetryPolicy(any(), eq(loadBalancerClient))) + .thenReturn(new BlockingLoadBalancedRetryPolicy(properties)); + + assertThatThrownBy(() -> feignBlockingLoadBalancerClient.execute(request, new Request.Options())) + .isInstanceOf(IOException.class); + + verify(delegate, times(1)).execute(any(), any()); + } + @Test void shouldExposeResponseBodyOnRetry() throws IOException { properties.getRetry().getRetryableStatusCodes().add(503); diff --git a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/loadbalancer/XForwardedHeadersTransformerTests.java b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/loadbalancer/XForwardedHeadersTransformerTests.java index 71093d98..3330ee23 100644 --- a/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/loadbalancer/XForwardedHeadersTransformerTests.java +++ b/spring-cloud-openfeign-core/src/test/java/org/springframework/cloud/openfeign/loadbalancer/XForwardedHeadersTransformerTests.java @@ -37,8 +37,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** - * Tests for - * {@link XForwardedHeadersTransformer}. + * Tests for {@link XForwardedHeadersTransformer}. * * @author changjin wei(魏昌进) */