Отключение соединения с БД - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть система с примерно 20 TPS. Эта система устанавливает соединения с БД для получения некоторых данных. Я использую Hibernate с c3p0 для управления своими соединениями и Guice для обеспечения транзакций с использованием аннотации @transactional. Около 0,3% запросов не выполняются из-за проблем с подключением к БД. Вот как выглядит трассировка стека.

javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: could not prepare statement
.
.
.
Caused by: org.hibernate.exception.JDBCConnectionException: could not prepare statement
.
.
.
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed

.
.
.
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
.
.
.
Caused by: java.net.SocketException: Connection reset

Мои настройки hibernate c3p0:

  hibernate.connection.url = "jdbc:mysql://dbHost.com:3306/DB";
  hibernate.dialect = "org.hibernate.dialect.MySQLDialect";
  hibernate.cache.provider_class = "org.hibernate.cache.NoCacheProvider";
  hibernate.hbm2ddl.auto = "update";
  hibernate.show_sql = "false";
  hibernate.connection.provider_class = "org.hibernate.c3p0.internal.C3P0ConnectionProvider";
  hibernate.c3p0.min_size = "100";
  hibernate.c3p0.max_size = "100";
  hibernate.c3p0.idle_test_period = "100";
  hibernate.c3p0.max_statements = "0";
  hibernate.c3p0.timeout = "86400";
  hibernate.c3p0.preferredTestQuery = "select 1";

Моя системная переменная БД:

connect_timeout=10
wait_timeout=86500
interactive_timeout=28800

Эти ошибки происходят случайным образом, и когда он повторяется для того же самого входа, для которого он первоначально потерпел неудачу, он работает.

Что я делаю не так?

1 Ответ

0 голосов
/ 13 ноября 2018

Вероятно, самый простой способ (надеюсь!) Решить эту проблему - добавить ...

hibernate.c3p0.testConnectionOnCheckout = "true"

С вашим установленным preferredTestQuery вряд ли это будет проблемой производительности.См. здесь для получения некоторых советов по тестированию соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...