jdk 1.6+
问题描述:应用系统中调用三方jar包提供的http方法,传了连接超时时间1s,读取超时时间5s,自测时启动一个服务端debug住,让客户端自动超时,结果发现30min都没有超时,线程一直在等待响应结果。查看三方jar包源码超时时间的设置采用了设置系统属性sun.net.client.defaultConnectTimeout,sun.net.client.defaultReadTimeout的方式。
排查步骤:
1.由于平常设置超时时间都是使用URLConnection.setConnectTimeout(),URLConnection.setReadTimeout()方法,初次用到这种设置系统属性的方式,莫得说,百度走起。
2.jdk1.5以前URLConnection没有设置超时的方法,所以采用
System.setProperty("sun.net.client.defaultConnectTimeout", "1000"),
System.setProperty("sun.net.client.defaultReadTimeout", "5000")
jdk1.5+以后,新增了URLConnection.setConnectTimeout(),URLConnection.setReadTimeout()方法,推荐使用
3.那么理论上来说设置系统属性的方式应该也是有效的,自己写个demo测试发现确实读取超时时间有效果,那我就纳闷了,为啥应用中调用却无效呢,jdk版本都是一致的。
4.百度了好几页,没有看到说System.setProperty的方式无效的,(吐槽一下,百度出来的大部分答案都是copy的,千篇一律,看的我都吐了