MySQLNonTransientConnectionException в программе JDBC во время выполнения

У меня есть Подключение mysql JDBC в Java. Моя программа хорошо работает для простого выполнения запроса.

Если я запускаю ту же программу больше 10 часов и выполняю запрос затем, я получаю следующее исключение MySQL:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: 
Connection.close() has already been called. Invalid operation in 
this state.
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(
  Native Method)
  com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:
  No operations allowed after statement closed.
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(
  Native Method)

Я не использовал close() метод где угодно. Я создал соединение с базой данных и открыл его навсегда и всегда выполнял запрос. Нет никакого места, где я явно упомянул тайм-аут для соединения. Я не могу определить проблему.

Вот код, который я использую для соединения с базой данных:

 String driver = PropertyReader.getDriver();
 String url = dbURLPath;
 Class.forName(driver);
 connectToServerDB = DriverManager.getConnection(url);
 connectToServerDB.setAutoCommit(false);

Что вызывает то исключение?

11
задан Eric Leschinski 24 March 2015 в 18:47
поделиться

1 ответ

MySQL завершает соединение по истечении 8 часов ожидания. Вы можете изменить время ожидания, установив переменную wait_timeout в MySQL.

Тем не менее, как правило, для приложения не рекомендуется поддерживать соединение в течение такого длительного времени. Лучшим подходом является создание пула соединений с использованием API объединения, такого как Apache DBCP , и получение соединений из пула, а не напрямую через драйвер. Пул соединений также позаботится о восстановлении объединенного соединения, если оно по какой-то причине умирает, включая тайм-ауты.

23
ответ дан 3 December 2019 в 02:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: