FtpInboundFileSynchronizer.setDeleteRemoteFiles(true)在传输后不删除远程文件

时间:2016-12-28 16:24:57

标签: spring-integration

我尝试使用spring boot,集成ftp示例(http://docs.spring.io/spring-integration/reference/html/ftp.html,15.5.1)。我能够从远程目录中读取文件,有些人不会删除带有标志setDeleteRemoteFiles(true)的文件。如果我缺少设置任何标志来删除远程文件,请告诉我。

@Bean
public SessionFactory<FTPFile> ftpSessionFactory() {
    DefaultFtpSessionFactory sf = new DefaultFtpSessionFactory();
    sf.setHost("localhost");
    sf.setPort(21);
    sf.setUsername("sudaredd");
    sf.setPassword("");
    return new CachingSessionFactory<FTPFile>(sf);
}

 @Bean
    public FtpInboundFileSynchronizer ftpInboundFileSynchronizer() {
        FtpInboundFileSynchronizer fileSynchronizer = new FtpInboundFileSynchronizer(ftpSessionFactory());
        fileSynchronizer.setDeleteRemoteFiles(true);
        fileSynchronizer.setRemoteDirectory("");
        fileSynchronizer.setFilter(new FtpSimplePatternFileListFilter("*"));
        return fileSynchronizer;
    }
  @Bean
    @InboundChannelAdapter(channel = "ftpChannel", poller = @Poller(fixedDelay = "5000"))
    public MessageSource<File> ftpMessageSource() {
        FtpInboundFileSynchronizingMessageSource source =
                new FtpInboundFileSynchronizingMessageSource(ftpInboundFileSynchronizer());
        source.setLocalDirectory(new File("ftp-inbound"));
        source.setAutoCreateLocalDirectory(true);
        source.setLocalFilter(new AcceptOnceFileListFilter<File>());
        return source;
    }

1 个答案:

答案 0 :(得分:0)

所有配置看起来都不错。

尝试为org.springframework.integration类别启用@InboundChannelAdapter以跟踪行为。

OTOH,请确保您的FTP服务器支持删除操作,并且您的用户确实有权执行该操作。

由于taskScheduler通过AbstractInboundFileSynchronizer.copyFileToLocalDirectory()执行任务,您可能会错过日志中的错误。

如果您能够调试代码并在HttpContext.Current.Session["RunSession"] = "1"; var userIdentity = userManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie); _authenticationManager.SignIn(new AuthenticationProperties { IsPersistent = rememberLogin }, userIdentity); 中设置断点以跟随逻辑并确定可能出错的地方,那么也会很棒。