Apache 在nifi groovy脚本中如何执行存储过程

Apache 在nifi groovy脚本中如何执行存储过程,apache,apache-nifi,Apache,Apache Nifi,我正在使用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

我正在使用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秒。因此,对于一个流文件,同一条记录被多次插入

那么,如何避免这种情况呢。

您不应该调用flowFile=session.create(),因为您已经从session.get()中获得了一个流文件,所以您基本上覆盖了原始引用,从而丢失了从未传输到任何地方的原始流文件的轨迹。

您不应该调用flowFile=session.create()因为您已经从session.get()中获得了一个流文件,所以您基本上覆盖了原始引用,从而丢失了从未传输到任何地方的原始流文件的轨迹