Как установить время ожидания для getConnection с помощью commons-dbcp BasicDataSource? - PullRequest
1 голос
/ 03 апреля 2019

Я использую commons-dbcp2 для создания пула соединений с базой данных.Когда база данных не работает dataSource.getConnection() метод занимает 20 секунд, а затем выдает исключение.Я хочу настроить DataSource для динамического изменения времени ожидания, например, 5 секунд.

Я пытался dataSource.setLoginTimeout(), но он не поддерживается для BasicDataSource

BasicDataSource dataSource = new BasicDataSource();

dataSource.setDriverClassName(driverName);       
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setInitialSize(3);
dataSource.setMaxTotal(100);  
dataSource.setValidationQuery(validationquery);
dataSource.setTestOnBorrow(true);
dataSource.setRemoveAbandonedOnBorrow(true);

try (Connection connection = dataSource.getConnection()) {

} catch (Exception e) {
}

Я хочу после 5секунд (как я настроил) выдает исключение.

1 Ответ

2 голосов
/ 03 апреля 2019

Вы можете попробовать validationQueryTimeout параметр , который позволяет установить время ожидания запроса проверки через X секунд:

dataSource.setValidationQueryTimeout(5);
dataSource.setTestOnBorrow(true);

Вам не нужно устанавливать проверочный SQL-запрос, современный драйвер JDBC имеет Connection.isValid().

К сожалению, в пуле DBCP есть проблемы из-за Плохое поведение: обработка базы данных не работает из-за ограничения времени ожидания TCP операционной системы. Когда тест был сделан в 2017 году:

Dbcp2 не вернул соединение, а также не превысил время ожидания. Выполнение запроса проверки застряло из-за неподтвержденного TCP-трафика. Впоследствии оператор SQL выполняется на (плохом) соединении из-за зависания тестового жгута (из-за неподтвержденного TCP). setMaxWait (5000), по-видимому, бесполезен для обработки сетевых сбоев. Других значимых параметров тайм-аута, применимых к сбою сети, нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...