超时的意义
由于TPC/IP 的结构,socket 没有办法检测到网络错误,因此应用也不能检测到与数据库之间的连接是否已经断开。
如果没有设置 socket 超时,应用程序会一直等待数据库返回结果。为了避免死连接,socket 必须设置超时时间,通过设置超时时间可以防止出现网络错误时一直等待的情况并缩短故障时间。
一般的数据库连接池都会提供链接检查的功能,但对于已经在使用中的连接往往不会再进行检测。
连接超时[ConnectTimeout]
仅在建立连接的过程中有效。连接建立后进行变更,不会再生效
HttpClient:链接建立的超时时间
MySQL : TCP连接超时时间
可以通过 Socket 对象的 connect(SocketAddress endpoint, int timeout) 方法来配置。
默认值:0,单位:毫秒
外部配置方式:jdbc:mysql://xxx.xx.xxx.xxx:3306/database?connectTimeout=60000&socketTimeout=60000
响应超时[SocketTimeout]
HttpClient: 响应超时时间,超过此时间不再读取响应
MySQL : socket的超时时间。通过 Socket 对象的 setSoTimeout(int timeout) 方法来配置
默认值:0,单位:ms
外部配置方式:jdbc:mysql://xxx.xx.xxx.xxx:3306/database?connectTimeout=60000&socketTimeout=60000
socketTimeout 参数设置的意义: 在查询时间超过一定的阈值【出现了慢查询】后,断开连接可以防止客户端的连接被一直占用。
连接池中获取连接超时[ConnectionRequestTimeout]
HttpClient: 从Connection Pool中获得一个connection的超时时间;
网友评论