我在Java应用程序和mysql服务器之间建立了标准的jdbc连接。
配置的连接超时为5秒,但是无论何时创建并重新使用连接(通过连接池)的连接超时都不再起作用。
还配置了套接字超时,但将其设置为5分钟以允许一些长时间运行的查询。
因此,现在的问题是,我无法在比这5分钟更短的时间内检测到实际丢失的MySQL服务器。
我有一个概念性的想法,将操作系统上的tcp keepalive探针设置设置为比默认值7200秒低得多的值,然后开始发送tcp探针。该解决方案的我的问题是,它影响应用程序服务器上的所有事物,并且理想情况下,我只想影响自己的应用程序。
是否没有办法让jdbc驱动程序也发送保持活动状态的探针来检测服务器是否关闭或正在工作?
答案 0 :(得分:0)
您可以直接打开与MySQL端口的连接(通常在3306上),并在套接字上设置一个非常短的超时。在Java套接字上有两个超时:连接建立超时和响应超时。如果连接被接受,但后者可能会引起问题,但会被操作系统排队(是的,如果连接速率很高,MySQL可能会发生这种情况)。在这种情况下,请设置以下超时时间:
socket.setSoTimeout(timeOut);
如果超时(以毫秒为单位)超过,这将引发套接字异常。
MySQL是服务器优先协议,因此它将立即欢迎您并告诉您它的协议和版本号。您可以在此之后关闭连接,MySQL会很好地处理此问题。