Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理FTP列表中的所有消息后停止Spring集成应用程序_Java_Spring_Ftp_Spring Integration - Fatal编程技术网

Java 处理FTP列表中的所有消息后停止Spring集成应用程序

Java 处理FTP列表中的所有消息后停止Spring集成应用程序,java,spring,ftp,spring-integration,Java,Spring,Ftp,Spring Integration,在Spring集成应用程序处理了一系列FTP出站网关ls命令产生的所有消息后,停止该应用程序的最佳方法是什么 作为一次性工作,我需要遍历FTP目录结构,对找到的每个目录进行递归,复制每个文件,然后将其作为消息发送以进行处理。一旦FTP目录树被完全遍历,并且遍历产生的所有消息都被处理完毕,我想优雅地停止应用程序 我目前的想法是,我可以尝试跟踪网关和所有队列的活动,当它们的大小都为0时,终止应用程序。这可能会变得更加复杂,方法是为每个目录保留所有文件的计数(这需要扩展AbstractRemoteFi

在Spring集成应用程序处理了一系列FTP出站网关
ls
命令产生的所有消息后,停止该应用程序的最佳方法是什么

作为一次性工作,我需要遍历FTP目录结构,对找到的每个目录进行递归,复制每个文件,然后将其作为消息发送以进行处理。一旦FTP目录树被完全遍历,并且遍历产生的所有消息都被处理完毕,我想优雅地停止应用程序

我目前的想法是,我可以尝试跟踪网关和所有队列的活动,当它们的大小都为0时,终止应用程序。这可能会变得更加复杂,方法是为每个目录保留所有文件的计数(这需要扩展
AbstractRemoteFileOutboundGateway
),确保目录名在流中的所有消息头上保持不变,然后拥有一个下游组件,该组件为每个目录保留已处理的消息计数,并在所有消息都被记录后启动关闭


这听起来是相当多的工作——有人知道更简单的方法吗?我可以选择在没有Spring集成的情况下编写应用程序,或者手工完成大量繁琐的工作(迭代FTP树,复制文件),或者使用Spring集成,但必须扩展部分以匹配我的用例。

稍微绕开一点,但这是我可以想到的一种方法:

.1。由于必须放置消息以触发ftp出站网关,因此在触发所有消息后,放置一条带有STOP say作为有效负载的虚拟消息。在出站ftp网关安装路由器之前,路由器将有选择地向ftp网关或step post ftp网关发送消息-通过一个一次只接受一条消息的通道发送消息,以便对消息进行序列化

.2。一旦进入文件处理通道,当您收到停止消息时,将此消息发送到特定的队列通道,例如停止队列通道

.3。在主程序中,获取对此停止队列通道的引用,一旦启动SI流,只需等待消息到达队列通道,一旦停止消息到达此队列通道,您的主方法将继续,并且流应在此点停止