Commit 68548d3e04d6e993f4372ca32c05e06b88c7e724

Authored by 王彬
1 parent bf02f60e
Exists in master

优化okhttpclient

src/main/java/com/taover/util/UtilHttpByOkHttp.java
... ... @@ -30,6 +30,10 @@ import okhttp3.Response;
30 30 import okhttp3.ResponseBody;
31 31  
32 32 public class UtilHttpByOkHttp {
  33 + //防止线程并发,使用threadlocal管理client
  34 + private static ThreadLocal<OkHttpClient> localHttpClientForHttp = new ThreadLocal<OkHttpClient>();
  35 + private static ThreadLocal<OkHttpClient> localHttpClientForHttps = new ThreadLocal<OkHttpClient>();
  36 +
33 37 public static final String METHOD_GET = "GET";
34 38 public static final String METHOD_POST = "POST";
35 39 public static final String METHOD_DELETE = "DELETE";
... ... @@ -125,16 +129,36 @@ public class UtilHttpByOkHttp {
125 129  
126 130  
127 131 public static OkHttpClient getHttpClient(String url, int timeoutInSecond){
128   - if(url.trim().toLowerCase().startsWith("https")){
129   - return buildOkHttpClientForHttps(timeoutInSecond);
  132 + OkHttpClient client = null;
  133 + boolean isHttps = url.trim().toLowerCase().startsWith("https");
  134 + if(isHttps){
  135 + client = localHttpClientForHttps.get();
  136 + }else{
  137 + client = localHttpClientForHttp.get();
  138 + }
  139 +
  140 + if(client != null){
  141 + return client;
  142 + }
  143 +
  144 + if(isHttps){
  145 + client = buildOkHttpClientForHttps(timeoutInSecond);
130 146 }else{
131 147 OkHttpClient.Builder builder = new OkHttpClient.Builder();
132 148 builder.connectTimeout(timeoutInSecond, TimeUnit.SECONDS)
133 149 .readTimeout(timeoutInSecond, TimeUnit.SECONDS)
134 150 .writeTimeout(timeoutInSecond,TimeUnit.SECONDS)
135 151 .retryOnConnectionFailure(true);
136   - return builder.build();
  152 + client = builder.build();
  153 + }
  154 +
  155 + if(isHttps){
  156 + localHttpClientForHttps.set(client);
  157 + }else{
  158 + localHttpClientForHttp.set(client);
137 159 }
  160 +
  161 + return client;
138 162 }
139 163  
140 164 /**
... ... @@ -216,30 +240,11 @@ public class UtilHttpByOkHttp {
216 240 * @return 只发post请求
217 241 * @throws Exception
218 242 */
219   - public static ResponseBody sendPostFile(String url, String filePath, String fileName,String fileKey,Map<String, String> header) throws Exception {
220   - OkHttpClient client = new OkHttpClient();
221   - RequestBody requestBody = new MultipartBody.Builder()
222   - .setType(MultipartBody.FORM)
223   - .addFormDataPart(fileKey, fileName,
224   - RequestBody.create(MediaType.parse("multipart/form-data"), new File(filePath)))
225   - .build();
226   -
227   - Request request = new Request.Builder()
228   - .headers(Headers.of(header))
229   - .url(url)
230   - .post(requestBody)
231   - .build();
232   -
233   - Response response = client.newCall(request).execute();
234   - if (!response.isSuccessful()){
235   - throw new IOException("Unexpected code " + response);
236   - }
237   - return response.body();
238   - }
239   -
240   -
  243 + public static ResponseBody sendPostFile(String url, String filePath, String fileName, String fileKey, Map<String, String> header) throws Exception {
  244 + return sendPostFile(url, new File(filePath), fileKey, header);
  245 + }
241 246  
242   - public static ResponseBody sendPostFile(String url, File file,String fileKey,Map<String, String> header) throws Exception {
  247 + public static ResponseBody sendPostFile(String url, File file, String fileKey, Map<String, String> header) throws Exception {
243 248 OkHttpClient client = new OkHttpClient();
244 249 RequestBody requestBody = new MultipartBody.Builder()
245 250 .setType(MultipartBody.FORM)
... ...