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,6 +30,10 @@ import okhttp3.Response;
30 import okhttp3.ResponseBody; 30 import okhttp3.ResponseBody;
31 31
32 public class UtilHttpByOkHttp { 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 public static final String METHOD_GET = "GET"; 37 public static final String METHOD_GET = "GET";
34 public static final String METHOD_POST = "POST"; 38 public static final String METHOD_POST = "POST";
35 public static final String METHOD_DELETE = "DELETE"; 39 public static final String METHOD_DELETE = "DELETE";
@@ -125,16 +129,36 @@ public class UtilHttpByOkHttp { @@ -125,16 +129,36 @@ public class UtilHttpByOkHttp {
125 129
126 130
127 public static OkHttpClient getHttpClient(String url, int timeoutInSecond){ 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 }else{ 146 }else{
131 OkHttpClient.Builder builder = new OkHttpClient.Builder(); 147 OkHttpClient.Builder builder = new OkHttpClient.Builder();
132 builder.connectTimeout(timeoutInSecond, TimeUnit.SECONDS) 148 builder.connectTimeout(timeoutInSecond, TimeUnit.SECONDS)
133 .readTimeout(timeoutInSecond, TimeUnit.SECONDS) 149 .readTimeout(timeoutInSecond, TimeUnit.SECONDS)
134 .writeTimeout(timeoutInSecond,TimeUnit.SECONDS) 150 .writeTimeout(timeoutInSecond,TimeUnit.SECONDS)
135 .retryOnConnectionFailure(true); 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,30 +240,11 @@ public class UtilHttpByOkHttp {
216 * @return 只发post请求 240 * @return 只发post请求
217 * @throws Exception 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 OkHttpClient client = new OkHttpClient(); 248 OkHttpClient client = new OkHttpClient();
244 RequestBody requestBody = new MultipartBody.Builder() 249 RequestBody requestBody = new MultipartBody.Builder()
245 .setType(MultipartBody.FORM) 250 .setType(MultipartBody.FORM)