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