使用nifi groovy脚本,我正在执行存储过程。
import java.sql.Connection;
import java.sql.PreparedStatement;
import org.apache.nifi.controller.ControllerService
def i;
def lookup = context.controllerServiceLookup
def dbServiceName = databaseConnectionPoolName.value
def dbcpServiceId = lookup.getControllerServiceIdentifiers(ControllerService).find {
cs -> lookup.getControllerServiceName(cs) == dbServiceName
}
def conn = lookup.getControllerService(dbcpServiceId)?.getConnection()
flowFile = session.get()
if(!flowFile) return
try {
flowFile = session.create()
PreparedStatement prepareStatement = conn.prepareStatement("exec dbo.terms 1,'test','test'");
i = prepareStatement.executeUpdate();
conn?.close()
}
catch(e) {
log.error('Scripting error', e)
}
session.transfer(flowFile, REL_SUCCESS)
session.commit();
以下是我遇到的例外,尽管我已经提到了这种关系。并且由于这些异常,即使生成流程文件生成了一个流程文件,并将其发送到executeSQL处理器,它也会执行相同的过程多次,而屈服时间为1秒。因此,对于一个流文件,相同的记录被插入了很多次。
答案 0 :(得分:2)
您不应该调用flowFile = session.create(),因为您已经从session.get()获得了流文件,因此您基本上是在覆盖原始引用,从而失去对从未使用过的原始流文件的跟踪转移到任何地方。