Нужно ли нам закрывать объект DBCPConnectionPool в пользовательском процессоре или он обрабатывается самой службой контроллера?

Я создал пользовательский процессор, который позаботится о сохранении некоторых записей в базе данных MySQL. Для настройки базы данных mysql я использую объект DBCPConnectionPool в моем пользовательском процессоре, который правильно выполняет сохранение данных в таблицы базы данных, но меня беспокоит механизм объединения, я не закрываю это соединение после завершения логики сохранения. Это работает для 2-3 потоковых файлов, но когда я отправлю несколько потоковых файлов, это будет работать правильно?

DBCPService dbcpService = context.getProperty(DBCP_SERVICE).asControllerService(DBCPService.class);
Connection con = dbcpService.getConnection();

Я ищу разъяснения, так как мой текущий поток работает правильно с меньшим количеством потокового файла

1 ответ

Решение

Вы должны вернуть его в пул, скорее всего, с помощью try-with-resource:

try (final Connection con = dbcpService.getConnection();
     final PreparedStatement st = con.prepareStatement(selectQuery)) {

}

Вы всегда можете обратиться к стандартным процессорам, чтобы увидеть, что они делают:

https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/AbstractExecuteSQL.java#L223

Другие вопросы по тегам