2017-09-20 2 views
0

Ich habe diesen Code, in dem ich ein SftpPersistentAcceptOnceFileListFilter und ich weiß nicht, wie. Der Filter sollte vor dem lokalen Abrufen von Dateien sein.SFTP Persistent Accept Only Once Filter auf SFTP-Gateway

@InboundChannelAdapter(value = "sftpMgetInputChannel", 
    poller = @Poller(fixedDelay = "5000")) 
public String filesForMGET(){ 
    return "'/tmp/input/remoteDirectory/*'"; 
} 

@Bean 
public IntegrationFlow sftpMGetFlow() { 
    return IntegrationFlows.from("sftpMgetInputChannel") 
      .handleWithAdapter(h -> h.sftpGateway(this.sftpSessionFactory, 
      Command.MGET, "payload") 
      .options(Option.RECURSIVE) 
      .regexFileNameFilter("((\\d{8})|*\\.txt)") 
      .localDirectoryExpression("'sftp-inbound/'" + "#remoteDirectory")) 
      .handler(messageHandler()) 
      .get(); 
} 

@Bean 
public MessageChannel sftpMgetInboundChannel(){ 
    return new DirectChannel(); 
} 

@Bean 
public MessageHandler messageHandler(){ 
return new MessageHandler() { ... } 
} 

Antwort

1

eine CompositeFileListFilter oder ChainFileListFilter mit einem SftpRegexPatternFileListFilter Filter verwenden und die SftpPersistentAcceptOnceFileListFilter.

Konstruieren Sie den Filter und verwenden Sie .filter(compositeFilter()).

+0

Das Präfix ctor arg im Filter dient lediglich zur Verwendung desselben Speichers in mehreren Filtern zur Isolierung. –