Как я могу настроить NiFi DBCPConnectionPool, чтобы не оставлять незанятые соединения открытыми?

По умолчанию NiFi (по крайней мере, с версии 1.8.0), похоже, поддерживает одно соединение с базой данных для каждой включенной службы контроллера DBCPConnectionPool. У меня есть несколько служб контроллера DBCPConnectionPool, настроенных для доступа к одному и тому же серверу с разными параметрами, поэтому это быстро складывается из ограниченного числа подключений к моему серверу базы данных. У меня есть запланированный рабочий процесс, который работает ~ каждую ночь. Соединения не должны быть активными, за исключением случаев активного использования в течение короткого промежутка времени.

Оглядываясь вокруг документация DBCPConnectionPool, похоже, что нет параметров конфигурации службы контроллера, связанных с Apache Commons-DBCP BasicDataSource параметры, такие как minIdle и maxIdle, которые, я думаю, должны быть установлены на 0 в моем конкретном использовании. кейс. В качестве альтернативы, я думаю, я мог бы установить maxConnLifetimeMillis на что-то даже в диапазоне минут и удовлетворить мой вариант использования (соединение не нужно разрывать немедленно, но в течение разумного периода времени).

Есть ли способ передать эти параметры без изменения кода DBCPConnectionPool? Примет ли Commons-DBCP эти параметры, переданные как параметры JDBC, установив их как динамические свойства в конфигурации службы контроллера NiFi DBCPConnectionPool?


person Colin Dean    schedule 01.11.2018    source источник
comment
Я использую NiFi 1.8.0 с jTDS 1.3.1 против SQL Server 2016. Я искал параметры jTDS, управляющие живучестью соединения, и не нашел. jtds.sourceforge.net/faq.html#urlFormat   -  person Colin Dean    schedule 02.11.2018
comment
Сообщение в списке рассылки nifi-users от февраля 2018 года, похоже, указывает, что эти параметры BasicDataSource НЕ изменяются с помощью свойств JDBC, установленных как динамические свойства в конфигурации DBCPConnectionPool. lists.aphread.apache. / а>   -  person Colin Dean    schedule 02.11.2018


Ответы (1)


NiFi начиная с 1.8.0 постоянно поддерживает одно соединение с базой данных открытым, потому что он использует конфигурацию по умолчанию Commons-DBCP 2.5.0, которая не очищает соединения. Значение по умолчанию Commons-DBCP для timeBetweenEvictionRunsMillis - -1, что приводит к тому, что отключение незанятого соединения никогда не выполняется.

NiFi 1.8.0 не предоставляет параметры конфигурации Commons-DBCP необходимо настроить это время.

NiFi 1.9.0 откроет эти настройки, добавленные в этом коммите .

person Colin Dean    schedule 12.11.2018