轮询具有多个子目录的目录

时间:2015-10-21 20:27:42

标签: spring spring-integration sftp

我正在尝试构建一个简单的实用程序,它将多个目录中的文件从一个sftp服务器复制到另一个服务器。

我尝试使用sftp出站网关使用命令“mget”轮询单个高级目录,但它不起作用。所以我想写两个入站适配器(不是一个好的解决方案,但仍然希望这样做很糟糕!)。

<int-sftp:inbound-channel-adapter
        id="pdbInbound"
         session-factory="sftpSessionFactory"        
         auto-create-local-directory="true" delete-remote-files="true"
        filename-pattern="*.*" remote-directory="${remote.pdb.directory}" 
        local-directory="${local.pdb.directory}">
        <int:poller fixed-rate="5000"/>
    </int-sftp:inbound-channel-adapter>

    <int-sftp:inbound-channel-adapter
        id="galaxyInbound"
          session-factory="sftpSessionFactory" 
        auto-create-local-directory="true" delete-remote-files="true"
        filename-pattern="*.*" remote-directory="${remote.galaxy.directory}"
        local-directory="${local.galaxy.directory}"  >
        <int:poller fixed-rate="5000"/>
    </int-sftp:inbound-channel-adapter>

上面的代码完全正常,文件按预期复制到本地目录。

当我需要将这些文件传输到具有与源目录相同的目录结构的远程目录时,会出现问题。使用带有command =“mput”和command-options =“ - R”的sftp-outbound网关,我无法实现它。所以,我试着编写两个出站适配器,如下所示。但只有一个目录写入远程。 知道这里出了什么问题吗?

    <int:service-activator input-channel="pdbInbound" output-channel="pdbOutbound" expression="payload"/> 
        <int:service-activator input-channel="galaxyInbound" output-channel="galaxyOutbound" expression="payload"/> 

        <int-sftp:outbound-channel-adapter id="sftPdbOutboundAdapter" auto-create-directory="true"
            session-factory="sftpSessionFactory"
             auto-startup="true"
            channel="pdbOutbound"
            charset="UTF-8"
            remote-file-separator="/"
            remote-directory="${remote.out.pdb.directory}"
             mode="REPLACE">
        </int-sftp:outbound-channel-adapter>

        <int-sftp:outbound-channel-adapter id="sftpGalaxyOutboundAdapter" auto-create-directory="true"
             auto-startup="true"
            session-factory="sftpSessionFactory"
            channel="galaxyOutbound"
            charset="UTF-8"
            remote-file-separator="/"
            remote-directory="${remote.out.galaxy.directory}"
             mode="REPLACE">
        </int-sftp:outbound-channel-adapter> 

 <int:poller default="true" fixed-delay="50"/>

注意:我正在为入站和出站文件使用相同的sftp服务器(但不同的目录)进行测试。

1 个答案:

答案 0 :(得分:0)

你需要更详细地解释你的问题 - “没有用”是非常不合适的,你不会在这里得到很多帮助。您需要显示您尝试过的内容和观察到的内容。

recursive mgetrecursive mput都有测试用例。

测试的目录结构显示在该文件顶部的注释中。

我建议您将这些与您尝试的内容进行比较,如果您有特定的问题/观察,请回到这里。解决这些问题的最佳方法是打开DEBUG日志记录;包括为jsch。