2017-06-16 46 views
2

我在春天的启动应用程序的工作来读取从FTP服务器的文件和数据写入到数据库中删除的文件。我使用Spring集成FTP与流(FtpStreamingMessageSource)Spring的集成的FTP流文件从服务器

@Bean 
@InboundChannelAdapter(channel = "streamPHI", poller = @Poller(fixedDelay = "2000", maxMessagesPerPoll="-1")) 
public MessageSource<InputStream> ftpMessageSourcePHI() { 
    FtpStreamingMessageSource messageSource = new FtpStreamingMessageSource(templatePhi, null); 
    messageSource.setRemoteDirectory(remoteDirectory); 
    messageSource.setFilter(new FtpPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "streaming")); 
    return messageSource; 
} 

当轮询开始这把流本进入另一个通道

@Bean 
@Transformer(inputChannel = "streamPHI", outputChannel = "data") 
public org.springframework.integration.transformer.Transformer transformerPhi() { 
    return new StreamTransformer(); 
} 

,它成功地获取文件,而且还从删除文件远程FTP服务器。这不是必需的。任何人都可以提出可能的原因吗?

感谢

----更新

但在我而言,我还没有写任何东西删除该文件。在第一个“转换”之后,我使用了另一个转换,它将文件的内容从字节转换为字符串。然后,服务激活器解析并将其保存到数据库中。

@Bean 
@Transformer(inputChannel = "data", outputChannel = "parse-shipping") 
public org.springframework.integration.transformer.Transformer handler() { 
    return new ByteToStringTransformer(); 

} 

@ServiceActivator(inputChannel = "parse-shipping") 
public void parseShippingInformation(String shipFileContent){ 
... 
} 


@Component 
public class ByteToStringTransformer extends AbstractTransformer { 

@Override 
protected Object doTransform(Message<?> message) throws Exception { 
    byte[] x = (byte[]) message.getPayload(); 
    StringBuilder str = new StringBuilder(); 
    for (byte b : x) { 
     str.append((char) b); 
    } 
    str.append(message.getHeaders().get("file_remoteFile")); 
    return str.toString(); 
} 

}

是否有FTP设置任何可能会造成这个? (同时我也正在研究这个,但是任何提示会有所帮助)

+0

你有解决这个任何配置(.XML)文件,您可以显示? – ochi

+1

不,没有XML配置。 –

回答

0

没有什么在将删除该文件的适配器;实际上文档提到...

与非流式入站通道适配器不同,此适配器默认情况下不会阻止重复。如果不删除远程文件(例如,使用出站网关与rm命令),并要防止文件被再次处理,可以配置在过滤器属性的FtpPersistentFileListFilter。如果您实际上不想保持该状态,则可以将内存中的SimpleMetadataStore与过滤器一起使用。如果你想使用文件名模式(或正则表达式),使用CompositeFileListFilter。

别的东西必须删除你的文件。

+0

谢谢你加里。但我没有写任何会删除文件,但不知何故它被删除..请看我编辑的帖子,如果你能找到任何东西。我已经在本地FTP服务器上测试过了,它并没有删除任何文件,但是当添加到生产FTP时,它是这样做的。 –

+0

必须是服务器。 ftp协议的网络跟踪将证明它。 –