Если мы посмотрим на руководство по настройке HikariCP, то увидим, что они не рекомендуют устанавливать значение для свойства minimumIdle
.
MinimumIdle
[...] Тем не менее, для максимальной производительности и реагирования на пиковые требования, мы рекомендуем не устанавливать это значение и вместо этого разрешать HikariCP действовать как пул соединений фиксированного размера. По умолчанию: то же, что и maximumPoolSize
.
Но проблема в том, что если мы не установим значение для minimumIdle
, оно будет установлено по умолчанию на то же самоезначение равно maximumPoolSize
, и в результате свойство idleTimeout
не будет работать, как мы увидим ниже, почему:
idleTimeout
Это свойство контролирует максимальную суммувремени, в течение которого соединению разрешено сидеть в пуле без дела. Этот параметр применяется только в том случае, если minimumIdle
меньше, чем maximumPoolSize
[...]
Так что, в основном, я доверял HikariCPконфигурации и пусть свойство minimumIdle
будет таким же, как maximumPoolSize
, но теперь я вижу кучу незанятых соединений в моей базе данных PostgreSQL (с помощью select * from pg_stat_activity
), которые не закрываются, потому что я предполагаю, что свойство idleTimeout
не работает, и я получаю смелое неприятное исключение:
SEVERE [HikariPool-1 connection adder] org.postgresql.Driver.connect Connection error:
org.postgresql.util.PSQLException: FATAL: connection limit exceeded for non-superusers
Так почему HikariCP рекомендует это?