Как установить время ожидания соединения в драйвере MySQL JDBC?

Я вижу, что драйвер JDBC MySQL постоянно терпит неудачу при попытках подключения к остановленной MySQL через 10 секунд, но я хотел бы изменить этот тайм-аут.

Я попытался добавить ?connectTimeout=2000&socketTimeout=2000 в URI подключения, но это не помогло.

Есть ли способ настроить, сколько времени требуется драйверу для возврата тайм-аута при подключении к MySQL?


person Edy Bourne    schedule 25.01.2014    source источник


Ответы (5)


Вы можете изменить значение по умолчанию в файле конфигурации MySQL (опция тайм-аута подключения в разделе mysqld) -

[mysqld]
connect-timeout=100

Если этот файл недоступен для вас, вы можете установить это значение с помощью этого оператора -

SET GLOBAL connect_timeout=100;
person Salah    schedule 25.01.2014
comment
Я в замешательстве... разве это не настройка демона mysql. Что делать, если вы хотите, чтобы настройка была на стороне клиента. т.е. мой клиент может не иметь настроек с демон-сервера, верно? или я ошибаюсь? - person Dean Hiller; 24.03.2016
comment
Это настройка на сервере MySQL. Это никак не повлияет на клиента, пытающегося подключиться к этому серверу, когда он остановлен. - person Adrian Baker; 08.03.2017

Я попытался добавить ?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 .

person Adrian Baker    schedule 08.03.2017

Добавьте это перед вызовом getConnection.

...
DriverManager.setLoginTimeout(2);
DriverManager.getConnection(connectString);
...

Сработало в моем случае.

person Johan Le Roux    schedule 15.10.2018

Вы можете установить время ожидания соединения, используя это:

con.query('SET GLOBAL connect_timeout=2000')
con.query('SET GLOBAL wait_timeout=2000')
con.query('SET GLOBAL interactive_timeout=2000')

Для получения дополнительной справки см. MySqlConnection

person ravibagul91    schedule 25.01.2014

Если вам не помогают ни connectTimeout, ни socketTimeout, попробуйте добавить MAX_EXECUTION_TIME в sessionVariables в URL:

jdbc:mysql://{host}:{port}/{database}?sessionVariables=MAX_EXECUTION_TIME=123456666

Запрос для проверки:

SELECT @@max_execution_time

Ожидаемый результат:

+--------------------+ 
|@@max_execution_time| 
+--------------------+ 
| 123456666          | 
+--------------------+
person Beniamin H    schedule 09.07.2021