我们是否需要关闭 Custom Processor 中的 DBCPConnectionPool 对象,还是由 Controller Service 自己处理?

Do we need to close DBCPConnectionPool object in Custom Processor Or Is it handled by Controller Service itself?

我创建了一个自定义处理器,负责在 mysql 数据库中保存一些记录。为了设置 mysql 数据库,我在我的自定义处理器中使用 DBCPConnectionPool 对象,它可以正确地将数据保存到数据库表中,但我担心池机制,我不会在我的保存逻辑完成后关闭此连接。这适用于 2 到 3 个流文件,但是当我发送多个流文件时它能正常工作吗?

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

我正在寻求澄清,因为我当前的流在使用较少数量的流文件时正常工作

您应该将它放回池中,最有可能使用 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