Я создаю интерфейс RESTful для базы данных, размещенной на MariaDB, и не могу понять, как правильно настроить HikariCP, чтобы мои соединения с базой данных не превышали время ожидания после простоя сервера некоторое время.
Я нахожусь на Linux, Java 1.8, и мой сервер базы данных - стандартный MariaDB 5.5.60. Мое приложение использует следующий технический стек:
- весна-загрузка-стартер-JDBC: 2.0.1
- весна-загрузки данных остальное: 2.0.1
- jdbi3-ядро: 3.1.0
- jdbi3-SQLObject: 3.1.0
- MySQL-разъем-Java: 5.1.46
- HikariCP: 2.7.8 (неявно предоставляется через Spring)
Мой файл application.properties в настоящее время выглядит следующим образом:
spring.datasource.url=jdbc:mysql://localhost/my_database
spring.datasource.username=myusername
spring.datasource.password=myp@ssw0rd
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 15 min * 60 sec * 1000 ms = 900000
spring.datasource.hikari.maxLifetime=900000
Значение "maxLifetime" игнорируется. Я попробовал все виды вещей, связанных с Хикари, в этом файле (многие из них можно найти здесь на SO), но ни одна из них, похоже, не работает. Когда я пытаюсь попасть на сервер после того, как он простаивал в одночасье, я получаю следующее предупреждение:
com.zaxxer.hikari.pool.ProxyConnection: HikariPool-1 - Connection com.mysql.jdbc.JDBC4Connection@140ae1bb marked as broken because of SQLSTATE(08S01) ,ErrorCode(0)
com.mysql.jdbc.exception.jdb4.CommunicationsException: The last packet successfully received from the server was 422,968,077 milliseconds ago. The last packet sent successfully to the server was 422,968,086 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
... а потом куча ошибок и следов стека, от которых я тебя пощадил.
Моя интуиция говорит мне, что в моем файле application.properties отсутствует какая-то волшебная комбинация параметров, но я в растерянности. Я также в недоумении, как проверить, что он действительно работает, без необходимости ждать всю ночь.
Любая помощь приветствуется!