Spring Integration轮询目录

时间:2019-01-22 11:39:55

标签: java spring-integration sftp spring-integration-sftp

我有一个用例,我需要在指定的目录结构中将.fif文件从本地上传到远程sftp服务器。如下所示:

enter image description here

现在,其他一些服务器/应用程序将处理这些.fif文件,并将生成.npz文件,并将其放置在相应visit / id的输出文件夹中。

我可以使用sftpOutboundAdapter上传文件,并且可以正常工作。

现在,我不知道如何添加轮询才能知道在此访问的此输出目录中创建了输出文件。我不想在输出文件夹中下载文件。我只想知道已经创建了4个文件,以便我可以更新访问的状态。

到目前为止,我的代码是

$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.To = "usermail@something.com"
$Mail.Subject = "Powershell"
$Mail.Body ="email text here"
$Date = (Get-Date).tostring("yyyyMMdd")
$File = "C:\Users\user\Desktop\log$Date.csv"
$Mail.Attachments.Add($File)
$Mail.Send()

请给java配置如何如何轮询父目录(即提供程序)并知道直到创建.npz文件的相应visits / id的输出文件夹为止的路径。然后获取创建的文件数或文件列表。

1 个答案:

答案 0 :(得分:0)

outbound gateway与LS命令一起使用(如果需要,它具有递归选项)。

只需将远程目录发送到网关,它将返回列表。

编辑

要在下面回答您的评论;您没有显示您的呼叫代码,但是为什么不能做这样的事情……

@MessagingGateway
public interface UploadGateway {

    @Gateway(requestChannel = "toSftpChannel")
    void upload(@Payload File file, @Header("fileName") String fileName, @Header("path") String path,
            @Header("parentId") Long parentId);

    @Gateway(requestChannel = "toSftpLsGatewayChannel")
    List<LsEntry> getOutputFiles(String path);

}

this.gateway.upload(file, fileName, path, parentId);
List<LsEntry> outputs;
String outputPath = path.replace("/input", "/output");
do {
    outputs = this.gateway.getOutputFiles(outputPath);
    Thread.sleep(5_000);
} while (outputs == null || outputs.size() == 0);

如果您希望它异步运行,只需在任务执行器上运行第二部分。