У нас была такая же проблема при первом входе в систему утром на одной из наших производственных систем.
Решением было установить минимальный размер пула соединений на ноль.
Если для минимального размера задано значение больше нуля (например, единица), соединения с тайм-аутом удаляются из пула, когда они обнаруживаются как недействительные, но некоторые из них (в примере выше, последний) остаются в пуле (если минимальный размер равен единице, одно соединение остается в пуле, даже если оно еще не является действительным).
В следующий раз, когда приложение запрашивает соединение, обслуживается недействительное соединение, что приводит к исключению.
При установке минимального размера равным нулю, все недействительные соединения удаляются из пула, поэтому нет никакой вероятности, что соединение, обслуживаемое приложением, еще не является действительным (поскольку, если оно допустимо, оно остается в пуле, если оно нет, удаляется из пула).
Использование предварительного тестирования может быть допустимой альтернативой, но потребует дополнительных усилий, поскольку каждый раз, когда соединение подается приложению, проверяется.