我的应用程序使用JDBC对MySQL进行查询。有时,在查询运行时,连接将丢失到服务器。代码不会检测到并抛出异常,而是挂起,直到TCP连接最终超时(这需要超过10分钟)
设置查询超时不起作用。如果数据库服务器保持运行,这将超时查询,但如果服务器在超时触发之前发生故障,则不执行任何操作。
在MySQL连接字符串中设置socketTimeout
或在.withNetworkTimeout
对象上调用Connection
有效。如果在指定的超时后没有收到响应,这会强制连接超时,但是即使数据库服务器已启动,它也会终止运行时间超过超时的查询。如果数据库服务器出现故障但仍能运行长查询,我想快死。
如果我可以使用套接字Keepalive设置,那么我可以将探测器的间隔/数量设置得更低并且可以解决问题,但我无法通过MySQL JDBC驱动程序看到这样做。
如何在数据库服务器出现故障时快速导致查询失败,同时仍能运行长查询?