【发布时间】:2014-02-16 12:41:58
【问题描述】:
我看到 JDBC MySQL 驱动程序在 10 秒后始终无法连接到已停止的 MySQL,但我想更改该超时。
我尝试将 ?connectTimeout=2000&socketTimeout=2000 添加到连接 URI,但这并没有什么不同。
有没有办法自定义驱动程序在连接到 MySQL 时返回超时所需的时间?
【问题讨论】:
标签: java mysql jdbc timeout connection-timeout
我看到 JDBC MySQL 驱动程序在 10 秒后始终无法连接到已停止的 MySQL,但我想更改该超时。
我尝试将 ?connectTimeout=2000&socketTimeout=2000 添加到连接 URI,但这并没有什么不同。
有没有办法自定义驱动程序在连接到 MySQL 时返回超时所需的时间?
【问题讨论】:
标签: java mysql jdbc timeout connection-timeout
您可以更改 MySQL 配置文件中的默认值(mysqld 部分中的连接超时选项)-
[mysqld]
connect-timeout=100
如果您无法访问此文件,则可以使用此语句设置此值 -
SET GLOBAL connect_timeout=100;
【讨论】:
您可以使用以下方法设置连接超时:
con.query('SET GLOBAL connect_timeout=2000')
con.query('SET GLOBAL wait_timeout=2000')
con.query('SET GLOBAL interactive_timeout=2000')
如需更多帮助,请参阅MySqlConnection
【讨论】:
我尝试将 ?connectTimeout=2000&socketTimeout=2000 添加到连接 URI,但这并没有什么不同。
这正是它的配置方式,例如
jdbc:mysql://aaa.bbb.ccc.rds.amazonaws.com:1234/hello?connectTimeout=5000&socketTimeout=30000
见https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html。
【讨论】:
在调用 getConnection 之前添加它。
...
DriverManager.setLoginTimeout(2);
DriverManager.getConnection(connectString);
...
在我的情况下工作。
【讨论】:
如果connectTimeout 或socketTimeout 都没有帮助到您,您可以尝试在网址中将MAX_EXECUTION_TIME 添加到sessionVariables:
jdbc:mysql://{host}:{port}/{database}?sessionVariables=MAX_EXECUTION_TIME=123456666
查询验证:
SELECT @@max_execution_time
预期输出:
+--------------------+
|@@max_execution_time|
+--------------------+
| 123456666 |
+--------------------+
【讨论】: