Baru -baru ini, saya menemukan masalah saat menyinkronkan data. Setelah memasukkan data di latar belakang, saya menyinkronkannya dengan departemen lain. Sederhananya, itu sebenarnya untuk memanggil antarmuka yang disediakan oleh pihak lain dan melakukan panggilan permintaan HTTP. Kemudian saya menemukan masalah nanti. Jika permintaan HTTP diminta, batas waktu permintaan, interupsi gagal, dan pengecualian IO sebenarnya dimungkinkan. Jika normal untuk membuka halaman web, tidak apa -apa, tetapi ketika tidak dapat dibuka, Anda akan menutupnya, atau halaman akan menampilkan informasi kepada Anda. Namun, sinkronisasi tidak dapat dilakukan. Setelah permintaan gagal, data harus disinkronkan dengan benar. Hari ini, saya menyadari pentingnya masalah ini.
String httpurl = "https://www.baidu.com/s?ie=utf-8&tn=90594569_hao_pg&wd=1"; Url url = null; HttpurlConnection httpconn = null; Hasil string = ""; coba {string address = httpurl; url = url baru (alamat); httpconn = (httpurlconnection) url.openconnection (); // Koneksi URL dapat digunakan untuk input dan/atau output. Atur // DoInput Flag ke True jika Anda bermaksud menggunakan koneksi URL untuk input, // false jika tidak. Standarnya benar. // Koneksi URL dapat digunakan untuk input atau output. Jika Anda ingin menghubungkan input dengan URL, atur tag DoInput ke True. // Input dan output ditujukan untuk komputer, dan jika Anda mempertimbangkannya dari perspektif seorang programmer, Anda akan sering bingung. // Input input dan output output, lalu bukankah dibaca dari output atau menulis dari input? Bahkan, sebaliknya, // input input dimasukkan ke dalam komputer dan komputer dapat membacanya, jadi itu dari input baca, dan output adalah output komputer, yaitu melalui output write. httpconn.setDoOutput (false); // Jadi jika setDoInput (false), Anda tidak dapat membaca ketika Anda ingin membaca dari urlconnection // tidak dapat membaca dari urlconnection jika doinput = false (hubungi setDoInput (true)) httpconn.setDoInput (true); // Waktu batas waktu pembentukan koneksi dan waktu batas waktu data juga dibaca, httpconn.setConnecttimeout (6000000); httpconn.setreadtimeout (6000000); httpconn.setRequestMethod ("get"); httpconn.connect (); // Dapatkan kode status kode int = httpconn.getResponsecode (); System.out.println (kode); // Baca http permintaan respons bufferedReader reader = new buferedReader (inputStreamReader baru (httpconn.getInputStream ())); Garis string; while ((line = reader.readline ())! = null) {result = result + line + "/n"; } System.out.println (hasil); // tutup IO dan hubungkan pembaca.close (); httpconn.disconnect (); } catch (Exception e) {log.error (e); } akhirnya {if (httpconn! = null) httpconn.disconnect (); }Kode tampaknya ditulis dalam sedikit, dan tempat -tempat di mana sumber daya harus dirilis juga dirilis. Jika Anda harus memanggil output log, Anda juga akan memanggilnya. Bahkan, masalahnya adalah penanganan pengecualian. Saya pikir beberapa hal tidak disinkronkan sebelumnya karena masalah batas waktu koneksi. Jadi saya secara khusus menangkap pengecualian Exception SocketTimeOut. Setelah melihat log nanti, saya menemukan bahwa itu adalah masalah dengan server pada antarmuka sinkronisasi dan melaporkan kesalahan 502. Faktanya, pengecualian adalah pengecualian IO.
Tidak masalah dalam kasus itu, setelah masalah ini terjadi, kita harus mengirim permintaan lagi dan mengkonfirmasi bahwa pihak lain telah disinkronkan sesuai dengan hasil yang dikembalikan oleh antarmuka. Jika ada masalah sementara dengan server, kami dapat menjeda untuk waktu yang singkat dan kemudian memintanya lagi.
Jadi metode yang terlintas dalam pikiran adalah bahwa karena persyaratan real-time dari sinkronisasi tidak tinggi, intervalnya bisa lebih lama. Kemudian loop dan mulai utas lagi, interval antara 5 menit setiap kali sampai hasilnya normal.
catch (exception e) {for (int i = 0; i <6; i ++) {thread t = thread baru () {public void run () {get ();}}; t.start (); if (result.equals ("ok")) {break; } coba {thread.sleep (300000); } catch (InterruptedException E2) {LOG.Error (E2); }} log.Error (e); }Di atas adalah kompilasi informasi tentang java httpurlconnection timeout dan penanganan pengecualian IO. Kami akan terus menambahkan informasi yang relevan di masa mendatang. Terima kasih atas dukungan Anda untuk situs ini!