Récemment, j'ai trouvé un problème lors de la synchronisation des données. Après avoir inséré des données en arrière-plan, je l'ai synchronisée avec d'autres départements. Pour le dire simplement, il s'agit en fait d'appeler l'interface fournie par l'autre partie et de passer des appels de demande HTTP. Ensuite, j'ai trouvé un problème plus tard. Si une demande HTTP est demandée, le délai d'expiration de la demande, l'interruption a échoué et l'exception IO est réellement possible. S'il est normal d'ouvrir une page Web, c'est bien, mais lorsqu'il ne peut pas être ouvert, vous le fermerez ou la page vous affichera des informations. Cependant, la synchronisation ne peut pas être effectuée. Une fois la demande échoue, les données doivent être synchronisées correctement. Aujourd'hui, je réalise l'importance de ce problème.
String httpurl = "https://www.baidu.com/s?ie=utf-8&tn=90594569_hao_pg&wd=1"; Url url = null; HttpurlConnection httpConn = null; Résultat de chaîne = ""; try {String Address = httpurl; url = nouvelle URL (adresse); httpConn = (httpurlConnection) url.openconnection (); // Une connexion URL peut être utilisée pour l'entrée et / ou la sortie. Définissez l'indicateur // DOInput sur true si vous avez l'intention d'utiliser la connexion URL pour l'entrée, // Faux sinon. La valeur par défaut est vraie. // La connexion URL peut être utilisée pour l'entrée ou la sortie. Si vous souhaitez connecter l'entrée avec l'URL, définissez la balise DOInput sur true. // L'entrée et la sortie sont destinées aux ordinateurs, et si vous le considérez du point de vue d'un programmeur, vous serez souvent confus. // Entrée Entrée et sortie de sortie, alors n'est-il pas lu à partir de sortie ou d'écriture à partir de l'entrée? En fait, au contraire, l'entrée // entrée est entrée dans l'ordinateur et l'ordinateur peut le lire, donc il est à partir de la lecture d'entrée, et la sortie est la sortie de l'ordinateur, qui se passe via la sortie d'écriture. httpConn.setDoOutput (false); // Donc, si setDoInput (false), vous ne pouvez pas lire lorsque vous souhaitez lire à partir d'UrlConnection // Impossible de lire à partir d'UrlConnection si DOInput = false (appel setDoInput (true)) httpConn.SetDoInput (true); // L'heure du délai d'expiration de l'établissement de connexion et le délai d'expiration des données sont également lus, httpconn.setConnectTimeout (6000000); HttpConn.SetReadTimeout (6000000); httpConn.setRequestMethod ("get"); httpConn.connect (); // obtient le code d'état int code = httpconn.getResponSECODE (); System.out.println (code); // Lire la réponse de la demande HTTP BufferedReader Reader = new BufferedReader (new InputStreamReader (httpConn.getInputStream ())); Ligne de chaîne; while ((line = reader.readline ())! = null) {result = result + line + "/ n"; } System.out.println (résultat); // Fermer IO et connecter Reader.Close (); httpConn.disconnect (); } catch (exception e) {log.Error (e); } Enfin {if (httpConn! = null) httpConn.disconnect (); }Le code semble être écrit dans peu, et les endroits où les ressources devraient être publiées sont également publiées. Si vous devez appeler la sortie du journal, vous l'appellerez également. En fait, le problème est le traitement des exceptions. Je pensais que certaines choses n'étaient pas synchronisées auparavant à cause du problème de délai d'expiration de la connexion. J'ai donc spécialement capturé l'exception SockettimeoutException. Après avoir regardé le journal plus tard, j'ai constaté que c'était un problème avec le serveur sur l'interface de synchronisation et signalé une erreur 502. En fait, l'exception est une exception IO.
Peu importe dans ce cas, une fois ce problème, nous devons renvoyer la demande et confirmer que l'autre partie a été synchronisée en fonction du résultat renvoyé par l'interface. S'il y a un problème temporaire avec le serveur, nous pouvons le mettre en pause pendant une courte période, puis le demander à nouveau.
La méthode qui me vient à l'esprit est que puisque l'exigence de synchronisation en temps réel n'est pas élevée, l'intervalle peut être plus long. Ensuite, faire boucle et recommencer le fil, intervalle entre 5 minutes à chaque fois jusqu'à ce que le résultat soit normal.
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; } essayez {Thread.Sleep (300000); } catch (InterruptedException e2) {log.Error (e2); }} log.Error (e); }Ce qui précède est une compilation des informations sur le délai d'expiration Java HttpurlConnection et la gestion des exceptions IO. Nous continuerons d'ajouter des informations pertinentes à l'avenir. Merci pour votre soutien à ce site!