Соединение было закрыто и удалено сообщение с HikariCP после определенного времени простоя
В моем загрузочном приложении Spring используется HikariCP. Я получаю следующее сообщение об ошибке «соединение закрыто, и соединение разорвано»
com.zaxxer.hikari.pool.PoolBase: HikariPool-1 - Failed to validate connection org.postgresql.jdbc.PgConnection@1610c743 (This connection has been closed.). Possibly consider using a shorter maxLifetime value.
[nnection closer] com.zaxxer.hikari.pool.PoolBase: HikariPool-1 - Closing connection org.postgresql.jdbc.PgConnection@1610c743: (connection was evicted)
Я получил это сообщение, когда оставил свое приложение включенным на ночь и попытался получить доступ к API из приложения примерно через 10 часов простоя. Первый звонок после 10 часов простоя потребовал 11 секунд для ответа и дал мне вышеуказанное сообщение в журналах. Последующие звонки после этого заняли время ответа около 2 секунд, и я не видел этого конкретного сообщения. Кто-нибудь знает, почему я получил это конкретное сообщение и почему потребовалось так много времени для первого звонка после простоя. Мое приложение развернуто в Azure Spring Cloud. Ниже приведены версии библиотеки.
HikariCP version: 4.0.3
Spring boot: 2.5.5
PostgresSql: 42.2.23
Стоимость собственности Хикари, которую я изменил. Я изменил это, потому что значение по умолчанию 30 минут давало мне тайм-аут соединения и было сгенерировано исключение. После изменения свойства maxLifetime теперь я не получаю исключения тайм-аута соединения
hikari:
maxLifetime: 300000
1 ответ
Если приложение бездействует, значит, у вас есть утечка соединения. Таким образом, эти сообщения будут отображаться в журналах.
Добавьте ниже свойства для проверки соединения:
spring.datasource.testWhileIdle=true
spring.datasource.test-on-borrow=true
Чтобы дополнительно проверить, есть ли утечка, добавьте ниже свойства и проверьте, как проходит ваше соединение с пулом:
spring.datasource.hikari.leakDetectionThreshold=2000
logging.level.com.zaxxer.hikari=DEBUG