欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java  HttpURLConnection超時(shí)和IO異常處理

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

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

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標(biāo)簽為true。 
  //輸入和輸出是針對(duì)計(jì)算機(jī)的,如果以程序員的角度考慮,經(jīng)常弄混。 
  //input輸入,output輸出,那么不是從output里read,input中write嗎,其實(shí)相反 
  //input輸入進(jìn)計(jì)算機(jī),計(jì)算機(jī)才能讀,所以是從input read,而output是計(jì)算機(jī)輸出,通過(guò)output write。 
  httpConn.setDoOutput(false); 
  //所以如果setDoInput(false),想從URLConnection讀取時(shí)不能讀取 
  //Cannot read from URLConnection if doInput=false (call setDoInput(true))  
  httpConn.setDoInput(true); 
   
  //連接建立超時(shí)時(shí)間還有讀取數(shù)據(jù)超時(shí)時(shí)間, 
  httpConn.setConnectTimeout(600000); 
  httpConn.setReadTimeout(600000); 
  httpConn.setRequestMethod("GET"); 
  httpConn.connect(); 
  
  //獲取狀態(tài)碼 
  int code = httpConn.getResponseCode(); 
  System.out.println(code); 
  //讀http請(qǐng)求響應(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(); 
} 

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

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

所以暫時(shí)想到的方法是,由于同步的實(shí)時(shí)性要求不高,那么可以間隔的時(shí)間可以長(zhǎng)一點(diǎn)。然后循環(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); 
} 





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

相關(guān)文章

  • Java實(shí)現(xiàn)將列表數(shù)據(jù)導(dǎo)出為PDF文件并添加水印

    Java實(shí)現(xiàn)將列表數(shù)據(jù)導(dǎo)出為PDF文件并添加水印

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)把列表數(shù)據(jù)導(dǎo)出為PDF文件,同時(shí)加上PDF水印,文中的示例代碼講解詳細(xì),需要的可以參考下
    2024-02-02
  • IDEA部署Tomcat的超詳細(xì)圖文教程

    IDEA部署Tomcat的超詳細(xì)圖文教程

    最近迫于無(wú)奈從我哪破舊的Eclipse轉(zhuǎn)換到了IDEA,然后就是超多的不習(xí)慣,下面這篇文章主要給大家介紹了關(guān)于IDEA部署Tomcat的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • IDEA2022中部署Tomcat Web項(xiàng)目的流程分析

    IDEA2022中部署Tomcat Web項(xiàng)目的流程分析

    這篇文章主要介紹了IDEA2022中部署Tomcat Web項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Java 獲取指定日期的實(shí)現(xiàn)方法總結(jié)

    Java 獲取指定日期的實(shí)現(xiàn)方法總結(jié)

    以下是對(duì)Java中獲取指定日期的實(shí)現(xiàn)方法進(jìn)行了歸納總結(jié),需要的朋友可以參考下
    2013-07-07
  • 解決mybatis無(wú)法給帶有下劃線屬性賦值問(wèn)題

    解決mybatis無(wú)法給帶有下劃線屬性賦值問(wèn)題

    這篇文章主要介紹了解決mybatis無(wú)法給帶有下劃線屬性賦值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 淺析Java基于Socket的文件傳輸案例

    淺析Java基于Socket的文件傳輸案例

    這篇文章主要針對(duì)Java基于Socket的文件傳輸案例進(jìn)行詳細(xì)解析,具有一定的參考價(jià)值,感興趣的朋友可以參考一下
    2016-02-02
  • SpringBoot整合Lettuce redis過(guò)程解析

    SpringBoot整合Lettuce redis過(guò)程解析

    這篇文章主要介紹了SpringBoot整合Lettuce redis過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • SpringSecurity之SecurityContextHolder使用解讀

    SpringSecurity之SecurityContextHolder使用解讀

    這篇文章主要介紹了SpringSecurity之SecurityContextHolder使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • OpenCV實(shí)現(xiàn)反閾值二值化

    OpenCV實(shí)現(xiàn)反閾值二值化

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)反閾值二值化,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • springboot實(shí)現(xiàn)rabbitmq的隊(duì)列初始化和綁定

    springboot實(shí)現(xiàn)rabbitmq的隊(duì)列初始化和綁定

    這篇文章主要介紹了springboot實(shí)現(xiàn)rabbitmq的隊(duì)列初始化和綁定,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10

最新評(píng)論