2017-03-01 23 views
1

FTPリポジトリからローカルリポジトリにリモートファイルを転送しようとしています。現時点では、最初の転送の点では動作しますが、ローカルファイルが削除された場合でも、最後に変更されたタイムスタンプからのリモートファイルの変更を受け取りたいと考えています。カスタムフィルタを作成しようとしていますが、Java DSLを使用してこれを行うにあたって多くの情報を見つけることはできません。Spring統合FTP Java DSL

@Bean 
public IntegrationFlow ftpInboundFlow(){ 
    return IntegrationFlows 
      .from(s -> s 
        .ftp(this.ftpSessionFactory()) 
          .preserveTimestamp(true) 
          .remoteDirectory(ftpData.getRemoteDirectory()) 
          .localDirectory(new File(ftpData.getLocalDirectory())), 
        e -> e.id("ftpInboundAdapter").autoStartup(true)) 
      .channel(MessageChannels.publishSubscribe()) 
      .get(); 
} 

答えて

0

最近修正されたのはhttps://jira.spring.io/browse/INT-4232です。

処理後にローカルファイルを削除しない限り、選択肢はありません。

https://jira.spring.io/browse/INT-4115のために、FtpPersistentAcceptOnceFileListFilterを使用する必要があります。

Java DSLの観点からは何もありません。 JavaのDSLを経由して

UPDATE

では、ローカルファイルを削除する方法の方に私を指すことができ

FtpInboundFileSynchronizingMessageSourceは、ペイロードとしてローカルファイルのために既にメッセージが生成されます。あなたがファイルで行われている

.setHeader(FileHeaders.RELATIVE_PATH, file.getAbsolutePath() 
         .replaceFirst(Matcher.quoteReplacement(this.directory.getAbsolutePath() + File.separator), 
           "")) 
.setHeader(FileHeaders.FILENAME, file.getName()) 
.setHeader(FileHeaders.ORIGINAL_FILE, file) 

下流すでにあなたが定期的にFile.delete()操作を経由して、それを削除することができます。また、いくつかのようなヘッダがあります。それは、ExpressionEvaluatingRequestHandlerAdviceを使用して、たとえば行うことができます。

@Bean 
public Advice deleteFileAdvice() { 
    ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice(); 
    advice.setOnSuccessExpressionString("headers[file_originalFile].delete()"); 
    return advice; 
} 

... 
.<String>handle((p, h) -> ..., e -> e.advice(deleteFileAdvice())) 
+0

ので、これを克服するために、私はので、最新のリモートファイルを取得するFTPサービスを実行する前に、私のローカルファイルを削除する必要がありますか?これは正しいです? – JamieUser

+0

正しい。また、ダウンストリーム処理後にローカルファイルを削除する必要があります。 –

+0

Java DSLを経由してローカルファイルを削除する方法、Java Configを使用しない場合はどうすればいいですか? – JamieUser

関連する問題