来自服务器

时间:2017-06-16 15:56:35

标签: spring spring-boot spring-integration

我正在使用Spring Boot App从FTP服务器读取文件并将数据写入数据库。我正在使用Spring Integration FTP with streaming(FtpStreamingMessageSource)

@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设置上是否有可能导致此问题的内容? (同时我也在考虑这个,但任何提示都会有所帮助)

1 个答案:

答案 0 :(得分:0)

适配器中没有任何内容可以删除文件;事实上,文件提到......

  

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

其他内容必须删除您的文件。