Recentemente, encontrei um problema ao sincronizar os dados. Depois de inserir dados em segundo plano, sincronizei -os com outros departamentos. Para simplificar, é realmente para chamar a interface fornecida pela outra parte e fazer chamadas de solicitação HTTP. Então eu encontrei um problema mais tarde. Se uma solicitação HTTP for solicitada, o tempo limite da solicitação, a interrupção falhou e a exceção de IO é realmente possível. Se for normal abrir uma página da web, está bem, mas quando não puder ser aberto, você o fechará ou a página exibirá informações para você. No entanto, a sincronização não pode ser feita. Depois que a solicitação falhar, os dados devem ser sincronizados corretamente. Hoje, percebo a importância desse problema.
String httpurl = "https://www.baidu.com/s?ie=utf-8&tn=90594569_hao_pg&wd=1"; Url url = nulo; HttpurlConnection httpconn = null; String result = ""; tente {string endereço = httpurl; url = novo url (endereço); httpconn = (httpurlConnection) url.openconnection (); // Uma conexão de URL pode ser usada para entrada e/ou saída. Defina o sinalizador // doinput como true se você pretende usar a conexão URL para entrada, // false, se não. O padrão é verdadeiro. // A conexão URL pode ser usada para entrada ou saída. Se você deseja conectar a entrada com o URL, defina a tag doinput como true. // A entrada e a saída são direcionadas a computadores e, se você a considerar da perspectiva de um programador, muitas vezes ficará confuso. // Entrada de entrada e saída de saída e não é lida da saída ou gravação da entrada? De fato, pelo contrário, // A entrada de entrada é inserida no computador e o computador pode lê -lo, para que seja da leitura de entrada, e a saída é a saída do computador, que é através da gravação de saída. httpconn.setdoOutput (false); // SO se setDoinput (false), você não pode ler quando deseja ler do UrlConnection // não é possível ler no urlConnection se doinput = false (chamado setDoinput (true)) httpconn.setdoinput (true); // O tempo limite do estabelecimento da conexão e o tempo de tempo limite dos dados também são lidos, httpconn.setConnectTimeout (6000000); httpconn.SetReadTimeout (6000000); httpconn.setRequestMethod ("get"); httpconn.connect (); // obtenha o código de status int code = httpconn.getResponsecode (); System.out.println (código); // Leia o http Solicle Response BufferReader Reader = new BufferredReader (new InputStreamReader (httpconn.getInputStream ()); Linha de string; while ((line = reader.readline ())! = null) {resultado = resultado + linha + "/n"; } System.out.println (resultado); // Fechar io e conectar leitor.close (); httpconn.disconnect (); } catch (Exceção e) {log.error (e); } finalmente {if (httpconn! = null) httpconn.disconnect (); }O código parece estar escrito em Little, e os lugares onde os recursos devem ser divulgados também são divulgados. Se você chama a saída do log, também o chamará. De fato, o problema é o tratamento de exceções. Eu pensei que algumas coisas não eram sincronizadas antes por causa do problema do tempo limite da conexão. Então, eu peguei especialmente a exceção do SockettimeoutException. Depois de olhar para o log mais tarde, descobri que era um problema com o servidor na interface de sincronização e relatei um erro 502. De fato, a exceção é uma exceção de IO.
Não importa nesse caso, depois que esse problema ocorre, devemos enviar a solicitação novamente e confirmar que a outra parte foi sincronizada de acordo com o resultado retornado pela interface. Se houver um problema temporário com o servidor, podemos pausar por um curto período de tempo e solicitá -lo novamente.
Portanto, o método que vem à mente é que, como o requisito em tempo real de sincronização não é alto, o intervalo pode ser mais longo. Em seguida, faça um loop e inicie o thread novamente, intervalo entre 5 minutos de cada vez até que o resultado seja normal.
Catch (Exceção e) {for (int i = 0; i <6; i ++) {thread t = new Thread () {public void run () {get ();}}; t.start (); if (resultado.equals ("ok")) {break; } tente {thread.sleep (300000); } catch (interruptedException e2) {log.error (e2); }} log.error (e); }O exposto acima é uma compilação das informações sobre o tempo limite de Java HttpurlConnection e o manuseio de exceção de IO. Continuaremos a adicionar informações relevantes no futuro. Obrigado pelo seu apoio a este site!