В первом случае требуется 30 секунд, чтобы сообщить о сбое, поскольку вы не установили ограничение, поэтому клиенты будут ждать в течение неопределенного времени, пока соединение не станет доступным. По умолчанию c3p0 делает 30 попыток получить соединение из базовой базы данных с задержкой в одну секунду между каждой попыткой, прежде чем объявить об ошибке получения соединения и сообщить об этом ожидающим клиентам. Если вы хотите изменить это поведение, вы можете установить настройки c3p0 acquireRetryAttempts
и acquireRetryDelay
на все, что вы предпочитаете.
Во втором случае вы запрашиваете у c3p0 тайм-аут клиентов через 10 секунд, и это так. Что касается c3p0, получение соединения не завершилось неудачно. «Ошибка входа пользователя» не является причиной сбоя. Заданное вами время ожидания является причиной сбоя, поэтому c3p0 сообщает об этом.
Когда получение подключения окончательно завершается неудачно, ничего не глотается, ошибка регистрируется правильно. Но поток вашего клиента не имеет ничего общего с получением подключения. Весь смысл пула соединений состоит в том, чтобы отделить получение соединения уровня СУБД от проверок клиента. c3p0 «вспомогательные» потоки взаимодействуют с СУБД, а не с клиентским потоком.
Чтобы получить поведение, которое звучит так, как вам нужно, оставьте checkoutTimeout
неустановленным, но установите для acquireRetryAttempts
значение меньше 10. Затем, если данные для входа неверны, клиенты увидят ошибку при получении Соединения в течение 10 секунд.