springboot +restTemplate配置

需要引入的依赖

# okhttp客户端 <dependency>             <groupId>com.squareup.okhttp3</groupId>             <artifactId>okhttp</artifactId>         </dependency>            <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>         </dependency>  

RestTempalteConfig配置类

下面展示一些 内联代码片

package com.zhouzhou.springredistemplatedemo.controller;  import okhttp3.ConnectionPool; import okhttp3.OkHttpClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.OkHttp3ClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate;  import java.util.concurrent.TimeUnit;  @Configuration public class RestTempalteConfig { 	// 简单客户端配置     @Bean     public RestTemplate restTemplate1(){          SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();         factory.setConnectTimeout(5000);         factory.setReadTimeout(5000);         RestTemplate restTemplate = new RestTemplate(factory);         return restTemplate;     }  // 利用 okhttpclient 配置 (核心)     @Bean     public RestTemplate restTemplate2(OkHttpClient okHttpClient){         OkHttp3ClientHttpRequestFactory factory =new OkHttp3ClientHttpRequestFactory(okHttpClient);         return new RestTemplate(factory);     }      @Bean     public OkHttpClient okHttpClient(){          return new OkHttpClient().newBuilder()                 .retryOnConnectionFailure(false) //连接失败是否重试                 .connectionPool(new ConnectionPool(4,5, TimeUnit.MINUTES))// 连接池配置                 .connectTimeout(5,TimeUnit.SECONDS)//连接超时时间                 .readTimeout(10,TimeUnit.SECONDS)// 读取超时时间                 .writeTimeout(10,TimeUnit.SECONDS)//写超时时间                 .addInterceptor(new MyOkHttpClientIntercetor(2,1000)) // 增加过滤器,可以实现过一段时间重试的功能                 .build();     } }  

MyOkHttpClientIntercetor 配置类

package com.zhouzhou.springredistemplatedemo.controller;  import lombok.extern.slf4j.Slf4j; import okhttp3.Interceptor; import okhttp3.Request; import okhttp3.Response;  import java.io.IOException; import java.util.concurrent.TimeUnit;  @Slf4j public class MyOkHttpClientIntercetor implements Interceptor { 	// 重试次数     private int executionCount; 	// 每次重试间隔的时间     private long retryInterval;       public MyOkHttpClientIntercetor(int executionCount, long retryInterval) {         this.executionCount = executionCount;         this.retryInterval = retryInterval;     }      @Override     public Response intercept(Chain chain) throws IOException {         Request request = chain.request();         Response response = dorequest(chain, request);         int retryNum = 0;         while ((response == null || !response.isSuccessful()) && retryNum < executionCount) {             log.info("okhttpclient retry ,request=[{}],response=[{}]", request, response);             final long nextInterval = retryInterval;              try {                 log.info("okhttpclient retry, wait for {}ms", nextInterval);                 TimeUnit.MILLISECONDS.sleep(retryInterval);             } catch (InterruptedException e) {                 e.printStackTrace();             }             retryNum++;             response = dorequest(chain, request);          }         return response;     }      public Response dorequest(Interceptor.Chain chain, Request request) {           Response response = null;         try {             response = chain.proceed(request);         } catch (IOException e) {             e.printStackTrace();         }         return response;     } }