diff --git a/pom.xml b/pom.xml index e1b15c13..084a514f 100644 --- a/pom.xml +++ b/pom.xml @@ -286,6 +286,11 @@ feign-hystrix ${feign.version} + + com.netflix.feign + feign-okhttp + ${feign.version} + com.netflix.hystrix hystrix-core @@ -363,6 +368,11 @@ spring-integration-java-dsl ${spring-integration-dsl.version} + + com.squareup.okhttp + okhttp + 2.5.0 + com.google.guava guava diff --git a/spring-cloud-netflix-core/pom.xml b/spring-cloud-netflix-core/pom.xml index 9f693ca8..b9fd731e 100644 --- a/spring-cloud-netflix-core/pom.xml +++ b/spring-cloud-netflix-core/pom.xml @@ -116,6 +116,11 @@ feign-hystrix true + + com.netflix.feign + feign-okhttp + true + com.netflix.hystrix hystrix-core @@ -176,6 +181,11 @@ jersey-apache-client4 true + + com.squareup.okhttp + okhttp + true + org.projectlombok lombok diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientAutoConfiguration.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientAutoConfiguration.java index 5f90b45f..8abe20ae 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientAutoConfiguration.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/feign/ribbon/FeignRibbonClientAutoConfiguration.java @@ -33,6 +33,7 @@ import com.netflix.loadbalancer.ILoadBalancer; import feign.Client; import feign.Feign; import feign.httpclient.ApacheHttpClient; +import feign.okhttp.OkHttpClient; /** * Autoconfiguration to be activated if Feign is in use and needs to be use Ribbon as a @@ -81,4 +82,28 @@ public class FeignRibbonClientAutoConfiguration { return new LoadBalancerFeignClient(delegate, this.cachingFactory); } } + + @Configuration + @ConditionalOnClass(OkHttpClient.class) + @ConditionalOnProperty(value = "feign.okhttp.enabled", matchIfMissing = true) + protected static class OkHttpConfiguration { + + @Autowired(required = false) + private com.squareup.okhttp.OkHttpClient okHttpClient; + + @Autowired + CachingSpringLoadBalancerFactory cachingFactory; + + @Bean + public Client feignClient() { + OkHttpClient delegate; + if (this.okHttpClient != null) { + delegate = new OkHttpClient(this.okHttpClient); + } + else { + delegate = new OkHttpClient(); + } + return new LoadBalancerFeignClient(delegate, this.cachingFactory); + } + } } \ No newline at end of file diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java index c29acebb..91aad97d 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/feign/valid/FeignClientTests.java @@ -74,7 +74,7 @@ import feign.RequestTemplate; @WebIntegrationTest(randomPort = true, value = { "spring.application.name=feignclienttest", "logging.level.org.springframework.cloud.netflix.feign.valid=DEBUG", - "feign.httpclient.enabled=false"}) + "feign.httpclient.enabled=false", "feign.okhttp.enabled=false"}) @DirtiesContext public class FeignClientTests {