在FileReadingMessageSource使用它之后删除文件

时间:2015-05-21 01:47:01

标签: spring-integration

运行FileReadingMessageSource方法后,receive()中是否有选项/方式删除文件?

感谢。

2 个答案:

答案 0 :(得分:1)

在使用 setDeleteSourceFiles(true) 的消息处理程序的方法中,请参阅以下内容:

@Bean
@InboundChannelAdapter(value = FILE_CHANNEL_SOURCE, poller = 
@Poller(fixedDelay = INTERVAL))
public MessageSource<File> sourceFiles() {
    FileReadingMessageSource source = new FileReadingMessageSource();
    source.setAutoCreateDirectory(true);
    source.setDirectory(new File(sourceDir));
    source.setFilter(new SimplePatternFileListFilter(FILE_PATTERN));
    return source;
}

@Bean
@ServiceActivator(inputChannel = FILE_CHANNEL_SOURCE)
public MessageHandler processedFiles() {
    FileWritingMessageHandler handler = new FileWritingMessageHandler(new File(outputDir));
    handler.setFileExistsMode(FileExistsMode.FAIL);
    handler.setDeleteSourceFiles(true);
    handler.setExpectReply(false);
    return handler;
}

答案 1 :(得分:0)

你可以用这个(xml样本)来做到这一点:

<int:poller fixed-rate="500">
    <int:transactional synchronization-factory="syncFactory"/>
</int:poller>

<int:transaction-synchronization-factory id="syncFactory">
    <int:after-commit expression="payload.delete()"/>
</int:transaction-synchronization-factory>

其中<poller>适用于<int-file:inbound-channel-adapter>

作为transactionManager,您可以使用PseudoTransactionManagerhttp://docs.spring.io/spring-integration/docs/latest-ga/reference/html/transactions.html