如果在SFTP流式传输过程中读取一个文件失败,则放弃读取文件

时间:2019-05-29 23:17:48

标签: spring-boot spring-integration spring-integration-dsl spring-integration-sftp

我正在使用SFTP从远程目录一次读取文件。为此,我先使用LS网关,然后使用split,GET网关,然后最后重命名文件。

文件顺序对我来说非常重要,因此文件名具有重要性。我希望在使用GET网关流传输文件后,如果数据出现问题或在数据处理时出现问题,我不希望读取序列中的下一个文件。

IntegrationFlows.from(() -> path, e -> e.poller(Pollers.fixedDelay(60, TimeUnit.SECONDS)))
.handle(Sftp.outboundGateway(sftpSessionFactory(), LS, "payload")
        .regexFileNameFilter(".*csv"))
.split()
.handle(Sftp.outboundGateway(sftpSessionFactory(), GET, "payload.remoteDirectory + payload.filename").options(STREAM).temporaryFileSuffix("_reading"))
.handle(readCsvData(), e -> e.advice(afterReadingCsv()))
.filter(this, "checkSuccess")
.enrichHeaders(h -> h
        .headerExpression(FileHeaders.RENAME_TO, "headers[file_remoteDirectory] + 'archive/' + headers[file_remoteFile]")
        .headerExpression(FileHeaders.REMOTE_FILE, "headers[file_remoteFile]")
        .header(FileHeaders.REMOTE_DIRECTORY, "headers[file_remoteDirectory]"))
.handle(Sftp.outboundGateway(sftpSessionFactory(), MV, "headers[file_remoteDirectory]+headers[file_remoteFile]").renameExpression("headers['file_renameTo']"))
.get();

如果在数据处理过程中出现问题,我什至不想重命名文件,我可以停止该流程,但是我不确定如何停止该流程以读取后续文件。

0 个答案:

没有答案