最近、データを同期するときに問題が発見されました。バックグラウンドにデータを挿入した後、私はそれを他の部門と同期させました。簡単に言えば、実際には、相手が提供するインターフェイスを呼び出し、HTTPリクエストの呼び出しを行うことです。それから私は後で問題を見つけました。 HTTP要求が要求された場合、リクエストタイムアウト、割り込みが失敗し、IO例外が実際に可能です。 Webページを開くのが正常な場合は問題ありませんが、開いていない場合は閉じます。ページに情報が表示されます。ただし、同期は実行できません。要求が失敗したら、データを正しく同期する必要があります。今日、私はこの問題の重要性を認識しています。
string httpurl = "https://www.baidu.com/s?ie=utf-8&tn=90594569_hao_pg&wd=1"; url url = null; httpurlconnection httpconn = null;文字列結果= ""; try {string address = httpurl; url = new url(address); httpconn =(httpurlconnection)url.openconnection(); //入力および/または出力にURL接続を使用できます。 // doinputフラグをtrueに設定します。URL接続を入力に使用する場合は、// falseでない場合は// false。デフォルトは真です。 // url接続は、入力または出力に使用できます。入力をURLで接続する場合は、doinputタグをtrueに設定します。 //入力と出力はコンピューターを対象としており、プログラマーの観点から考慮すると、しばしば混乱します。 //入力入力と出力出力で、出力から読み取ったり、入力から書き込んだりしませんか?実際、それどころか、//入力入力はコンピューターへの入力であり、コンピューターはそれを読み取ることができるため、入力読み取りからであり、出力はコンピューター出力であり、出力書き込みです。 httpconn.setDoOutput(false); // setDoinput(false)の場合、urlconnectionから読みたいときに読み取ることができません//接続確立タイムアウト時間とデータタイムアウト時間も読み取られます。httpconn.setConnectTimeout(6000000); httpconn.setReadTimeout(6000000); httpconn.setRequestMethod( "get"); httpconn.connect(); //ステータスコードを取得int code = httpconn.getResponseCode(); System.out.println(code); // httpリクエスト応答BufferedReader reader = new BufferedReader(new inputStreamReader(httpconn.getInputStream()));文字列線; while((line = reader.readline())!= null){result = result + line + "/n"; } system.out.println(result); // ioを閉じて、reader.close()を接続します。 httpconn.disconnect(); } catch(例外e){log.error(e); }最後に{if(httpconn!= null)httpconn.disconnect(); }コードは少しで記述されているようで、リソースをリリースすべき場所もリリースされます。ログ出力を呼び出す必要がある場合は、呼び出します。実際、問題は例外の処理です。接続タイムアウトの問題のために、以前にいくつかのことが同期されていないと思いました。そこで、Sockettimeoutexceptionの例外を特別にキャッチしました。後でログを見た後、私はそれが同期インターフェイス上のサーバーの問題であることを発見し、502エラーを報告しました。実際、例外はIO例外です。
その場合、この問題が発生した後、再びリクエストを送信し、相手がインターフェイスによって返された結果に従って同期されていることを確認する必要があります。サーバーに一時的な問題がある場合は、それを短時間一時停止してから再度リクエストすることができます。
したがって、思い浮かぶ方法は、同期のリアルタイム要件が高くないため、間隔が長くなる可能性があるということです。次に、結果が正常になるまで、毎回5分間の間隔を再度ループして起動します。
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(arternedexception e2){log.error(e2); }} log.error(e); }上記は、Java httpurlconnection TimeoutおよびIO例外処理に関する情報の編集です。今後も関連情報を追加し続けます。このサイトへのご支援ありがとうございます!