這幾天測(cè)試Paypal的支付接口PayflowAPI,發(fā)現(xiàn)在通信過程中如果網(wǎng)絡(luò)中斷,那么程序就會(huì)掛死。雖然API本身提供了Timeout的設(shè)置,但似乎不管用。
經(jīng)過測(cè)試發(fā)現(xiàn),對(duì)方的代碼實(shí)現(xiàn)只是設(shè)置了connectTimeout,這樣在建立連接的時(shí)候如果網(wǎng)絡(luò)中斷,那么超時(shí)以后就會(huì)報(bào)出錯(cuò)誤。但如果連接建立以后網(wǎng)絡(luò)中斷,則無法超時(shí)。這說明程序本身沒有設(shè)置readTimeout。
正確的方法應(yīng)當(dāng)是調(diào)用HttpURLConnection的時(shí)候設(shè)置這兩個(gè)超時(shí)時(shí)間。由于第三方的程序無法修改,那么就需要設(shè)置JVM變量:
- System.setProperty("sun.net.client.defaultConnectTimeout", "30000");
- System.setProperty("sun.net.client.defaultReadTimeout", "30000");