최근에 데이터를 동기화 할 때 문제가 발견되었습니다. 백그라운드에 데이터를 삽입 한 후 다른 부서와 데이터를 동기화했습니다. 간단히 말해서, 실제로 상대방이 제공 한 인터페이스를 호출하고 HTTP 요청 호출을하는 것입니다. 그런 다음 나중에 문제를 발견했습니다. HTTP 요청이 요청되면 요청 시간 초과, 인터럽트가 실패하고 IO 예외가 실제로 가능합니다. 웹 페이지를 열는 것이 정상이라면 괜찮지 만 괜찮지 만 열 수 없으면 닫을 수 있거나 페이지에 정보가 표시됩니다. 그러나 동기화를 수행 할 수 없습니다. 요청이 실패하면 데이터를 올바르게 동기화해야합니다. 오늘 저는이 문제의 중요성을 알고 있습니다.
문자열 httpurl = "https://www.baidu.com/s?ie=utf-8&tn=90594569_hao_pg&wd=1"; url url = null; httpurlconnection httpconn = null; 문자열 결과 = ""; {문자열 주소 = httpurl; URL = 새 URL (주소); httpconn = (httpurlConnection) url.openConnection (); // URL 연결은 입력 및/또는 출력에 사용될 수 있습니다. 입력에 URL 연결을 사용하려면 // doinput 플래그를 true로 설정하십시오. 기본값은 사실입니다. // URL 연결은 입력 또는 출력에 사용될 수 있습니다. 입력을 URL로 연결하려면 doinput 태그를 true로 설정하십시오. // 입력 및 출력은 컴퓨터를 대상으로하며 프로그래머의 관점에서 고려하면 종종 혼란 스러울 것입니다. // 입력 입력 및 출력 출력은 출력에서 읽거나 입력에서 쓸 수 없습니까? 실제로, // 입력 입력은 컴퓨터에 입력되고 컴퓨터가 읽을 수 있으므로 입력 읽기에서 나오고 출력은 출력 쓰기를 통해 컴퓨터 출력입니다. httpconn.setdooutput (false); // setDoInput (false) 인 경우 urlConnection에서 읽을 때 읽을 수 없습니다. // doInput = false (call setDoinput (true)) httpconn.setdoinput (true) 인 경우 urlconnection에서 읽을 수 없습니다. // 연결 설정 시간 초과 시간 및 데이터 시간 초과 시간도 읽습니다. httpconn.setConnectTimeout (6000000); httpconn.setreadtimeout (6000000); httpconn.setRequestMethod ( "get"); httpconn.connect (); // 상태 코드를 가져옵니다 int code = httpconn.getResponseCode (); System.out.println (코드); // http 요청 응답 bufferedReader reader = new bufferedReader (new inputStreamReader (httpconn.getInputStream ())); 문자열 라인; while ((line = reader.readline ())! = null) {result = result + line + "/n"; } system.out.println (결과); // IO를 닫고 reader.close (); httpconn.disconnect (); } catch (예외 e) {log.error (e); } 마침내 {if (httpconn! = null) httpconn.disconnect (); }이 코드는 거의 쓰여진 것으로 보이며 자원이 릴리스되어야하는 장소도 릴리스됩니다. 로그 출력을 호출 해야하는 경우 호출합니다. 실제로, 문제는 예외를 처리하는 것입니다. 연결 시간 초과 문제로 인해 일부는 이전에 동기화되지 않았다고 생각했습니다. 그래서 나는 SockettimeOutException 예외를 특별히 잡았습니다. 나중에 로그를 살펴본 후 동기화 인터페이스의 서버에 문제가 있음을 발견하고 502 오류를보고했습니다. 실제로 예외는 IO 예외입니다.
이 경우 에도이 문제가 발생한 후 요청을 다시 보내고 인터페이스에 의해 반환 된 결과에 따라 상대방이 동기화되었음을 확인해야합니다. 서버에 일시적인 문제가있는 경우 서버를 짧은 시간 동안 일시 중지 한 다음 다시 요청할 수 있습니다.
따라서 떠오르는 방법은 동기화의 실시간 요구 사항이 높지 않기 때문에 간격이 더 길어질 수 있다는 것입니다. 그런 다음 루프하고 스레드를 다시 시작하고 결과가 정상이 될 때까지 매번 5 분 사이의 간격을 두십시오.
catch (예외 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 예외 처리에 대한 정보를 편집 한 것입니다. 우리는 향후 관련 정보를 계속 추가 할 것입니다. 이 사이트를 지원 해주셔서 감사합니다!