最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java  HttpURLConnection超時和IO異常處理

 更新時間:2016年09月19日 15:42:59   作者:iaiti  
這篇文章主要介紹了Java HttpURLConnection超時和IO異常處理的相關(guān)資料,需要的朋友可以參考下

最近同步數(shù)據(jù)的時候發(fā)現(xiàn)了一個問題,我本身后臺插入數(shù)據(jù)后給其他部門后臺做同步。說簡單一點其實就是調(diào)用對方提供的接口,進行HTTP請求調(diào)用。然后后面發(fā)現(xiàn)問題了。HTTP請求的話,有可能請求超時,中斷失敗,IO異常其實都有可能,如果是平時打開一個網(wǎng)頁還好,打不開的時候,你會關(guān)掉,或者他頁面給你顯示信息。但是同步,不可以這樣做,一旦請求失敗,必須讓數(shù)據(jù)正確的同步,今天才意識到這個問題的重要性。

String httpUrl = "https://www.baidu.com/s?ie=UTF-8&tn=90594569_hao_pg&wd=1"; 
URL url = null; 
HttpURLConnection httpConn = null; 
String result = ""; 
try { 
  String address = httpUrl; 
  url = new URL(address); 
  httpConn = (HttpURLConnection) url.openConnection(); 
   
  //A URL connection can be used for input and/or output. Set the  
  //DoInput flag to true if you intend to use the URL connection for input, 
  //false if not. The default is true.  
   
  //URL連接可用于input或output。如果想用URL連接輸入,設(shè)置DoInput標簽為true。 
  //輸入和輸出是針對計算機的,如果以程序員的角度考慮,經(jīng)常弄混。 
  //input輸入,output輸出,那么不是從output里read,input中write嗎,其實相反 
  //input輸入進計算機,計算機才能讀,所以是從input read,而output是計算機輸出,通過output write。 
  httpConn.setDoOutput(false); 
  //所以如果setDoInput(false),想從URLConnection讀取時不能讀取 
  //Cannot read from URLConnection if doInput=false (call setDoInput(true))  
  httpConn.setDoInput(true); 
   
  //連接建立超時時間還有讀取數(shù)據(jù)超時時間, 
  httpConn.setConnectTimeout(600000); 
  httpConn.setReadTimeout(600000); 
  httpConn.setRequestMethod("GET"); 
  httpConn.connect(); 
  
  //獲取狀態(tài)碼 
  int code = httpConn.getResponseCode(); 
  System.out.println(code); 
  //讀http請求響應(yīng) 
  BufferedReader reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream())); 
  String line; 
  while ((line = reader.readLine()) != null) 
  { 
    result = result + line+"\n"; 
  } 
  System.out.println(result); 
  //關(guān)閉IO和連接 
  reader.close(); 
  httpConn.disconnect(); 
} 
catch(Exception e){ 
  log.error(e); 
} 
finally{ 
  if(httpConn!=null) 
    httpConn.disconnect(); 
} 

代碼看上去寫的沒什么,該釋放資源的地方也釋放了。該打日志輸出的也打了。其實問題就是異常的處理。之前以為一些東西沒有同步過去是因為連接超時的問題。所以特地捕獲SocketTimeoutException異常,后面看了日志之后,發(fā)現(xiàn)是同步接口那邊服務(wù)器的問題,報了502錯誤。其實異常是IO異常。

無論是那種情況,我們都要在出現(xiàn)這種問題之后,再次地把請求發(fā)送過去,根據(jù)接口返回的結(jié)果,確認對方已經(jīng)同步到。如果服務(wù)器暫時性的出了問題,我們可以暫停一小段時間后,然后再次請求。

所以暫時想到的方法是,由于同步的實時性要求不高,那么可以間隔的時間可以長一點。然后循環(huán),另起線程,每次間隔5分鐘,直至結(jié)果正常。

catch(Exception e){ 
  for (int i = 0; i < 6; i++) { 
    Thread t = new Thread(){public void run(){get();}}; 
    t.start(); 
    if(result.equals("ok")){ 
      break; 
    } 
    try { 
      Thread.sleep(300000); 
    } catch (InterruptedException e2) { 
      log.error(e2); 
    } 
  } 
  log.error(e); 
} 





以上就是對Java  HttpURLConnection超時和IO異常處理的資料整理,后續(xù)繼續(xù)補充相關(guān)資料,謝謝大家對本站的支持!

相關(guān)文章

  • SpringCloud之Ribbon使用示例解析

    SpringCloud之Ribbon使用示例解析

    這篇文章主要為大家介紹了SpringCloud之Ribbon使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Mock和@InjectMocks的區(qū)別及說明

    Mock和@InjectMocks的區(qū)別及說明

    @Mock和@InjectMocks是Mockito框架中的兩個注解,前者用于創(chuàng)建模擬對象,后者用于將模擬對象注入到被測試類中
    2024-11-11
  • 解析Java繼承中方法的覆蓋和重載

    解析Java繼承中方法的覆蓋和重載

    這篇文章主要介紹了Java繼承中方法的覆蓋和重載的詳細概念及用法,非常的實用,這里推薦給大家,有需要的小伙伴可以參考下。
    2015-05-05
  • Java畢業(yè)設(shè)計實戰(zhàn)之寵物醫(yī)院與商城一體的系統(tǒng)的實現(xiàn)

    Java畢業(yè)設(shè)計實戰(zhàn)之寵物醫(yī)院與商城一體的系統(tǒng)的實現(xiàn)

    這是一個使用了java+Springboot+Jsp+maven+Mysql開發(fā)的寵物醫(yī)院與商城一體的系統(tǒng),是一個畢業(yè)設(shè)計的實戰(zhàn)練習,具有寵物醫(yī)院和寵物商城該有的所有功能,感興趣的朋友快來看看吧
    2022-02-02
  • Java Volatile應(yīng)用單例模式實現(xiàn)過程解析

    Java Volatile應(yīng)用單例模式實現(xiàn)過程解析

    這篇文章主要介紹了Java Volatile應(yīng)用單例模式實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • MyBatis-Plus中提供的各種注解詳細說明

    MyBatis-Plus中提供的各種注解詳細說明

    這篇文章主要介紹了MyBatis-Plus中提供的各種注解詳細說明,下面對MyBatis-Plus提供的注解進行整理,本文提供了部分示例代碼以方便理解,需要的朋友可以參考下
    2023-11-11
  • TraceIdPatternLogbackLayout日志攔截源碼解析

    TraceIdPatternLogbackLayout日志攔截源碼解析

    這篇文章主要為大家介紹了TraceIdPatternLogbackLayout日志攔截源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • SpringSecurity整合springBoot、redis實現(xiàn)登錄互踢功能

    SpringSecurity整合springBoot、redis實現(xiàn)登錄互踢功能

    這篇文章主要介紹了SpringSecurity整合springBoot、redis實現(xiàn)登錄互踢,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • java編程scanner類用法示例

    java編程scanner類用法示例

    這篇文章主要介紹了java編程scanner類用法示例,涉及一個通過scanner類實現(xiàn)需要手動輸入變量時進行輸入的實例,然后分享了一個簡單的eclipse對Java代碼格式化的技巧,具有一定借鑒價值,需要的朋友可以參考。
    2017-11-11
  • Java中Static關(guān)鍵字的五種用法詳解

    Java中Static關(guān)鍵字的五種用法詳解

    這篇文章主要介紹了Java中static的五種用法:修飾成員變量,修飾成員方法,修飾內(nèi)部類,靜態(tài)代碼塊,靜態(tài)導包,想詳細了解的小伙伴可以參考閱讀本文
    2023-03-03

最新評論

虹口区| 天台县| 宜兰市| 安吉县| 平阳县| 禹城市| 平阴县| 黑山县| 日土县| 鹤山市| 周口市| 乐平市| 吉木乃县| 抚顺市| 股票| 揭西县| 通榆县| 个旧市| 宁波市| 台中县| 龙泉市| 筠连县| 红桥区| 马山县| 离岛区| 驻马店市| 武强县| 茌平县| 合水县| 泉州市| 广元市| 灌云县| 罗田县| 泸州市| 古浪县| 阳曲县| 温州市| 莆田市| 揭东县| 得荣县| 绥德县|