我正在使用JDBC驱动程序从我的java代码(读取客户端)连接到mySql。
Driver = com.mysql.jdbc.Driver
JdbcUrl = jdbc:mysql://<<IpOftheDb>>/<<DbSchema Name>>?autoReconnect=true&connectTimeout=5000&socketTimeout=10000
如果数据库关闭(托管数据库的机器已启动但mysqld进程未运行),则需要一些时间才能获得异常,例外是
&#34; com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:无法创建与数据库服务器的连接。尝试重新连接3次。放弃。&#34;
在上面的语句中,socketTimeout为10秒。现在,如果我以10秒的速度调出数据库作为SocketTimeout,我会正确得到响应。
但如果我将它减少到一秒并执行查询,我会得到相同的异常。
&#34; com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:无法创建与数据库服务器的连接。尝试重新连接3次。放弃。&#34;
但是connectTimeout不会改变任何东西。有人可以解释一下socketTimeout和connectTimeout的含义。
另外,如果我们正在设置复制并将第二个数据库指定为故障转移,即
我的连接字符串更改为
jdbc:mysql://<<PrimaryDbIP>>,<<SecondaryDbIp>>/<<DbSchema>>?useTimezone=true
&serverTimezone=UTC&useLegacyDatetimeCode=false
&failOverReadOnly=false&autoReconnect=true&maxReconnects=3
&initialTimeout=5000&connectTimeout=6000&socketTimeout=6000
&queriesBeforeRetryMaster=50&secondsBeforeRetryMaster=30
我看到如果主要是关闭,那么我从次要(故障转移Db)得到响应。 现在,当客户端执行查询时,它是否转到主数据库然后等待socketTimeout(或其他),然后转到Secondary或者在超时发生之前转到Seconday。 此外,第二次使用相同的连接对象时,它是直接进入辅助对象还是再次重复上述过程。
我试过找到一些解释这个但却无法解决的文档。
希望有人可以在这里帮助解释各种超时参数及其用途。