是否需要在“定制处理器”中关闭DBCPConnectionPool对象,还是由Controller Service本身处理?

时间:2019-07-30 10:58:15

标签: apache apache-nifi hortonworks-dataflow dbcp

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

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

我正在寻求澄清,因为我的当前流程正在正常运行,流文件数量较少

1 个答案:

答案 0 :(得分: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