Spring Integration:具有延迟的文件复制功能

时间:2017-01-30 18:42:36

标签: spring spring-integration

我使用以下配置将文件从一个目录复制到另一个目录 -

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

@Bean
@InboundChannelAdapter(value = "fileInputChannel", poller = @Poller(fixedDelay = "10000") )
public MessageSource<File> fileReadingMessageSource() { 
    FileReadingMessageSource source = new FileReadingMessageSource();
    source.setDirectory(new File("C:/input_dir"));
    source.setFilter(new RegexPatternFileListFilter(".*"));
    return source;
}

@Bean
@ServiceActivator(inputChannel = "fileInputChannel")
public FileWritingMessageHandler handle() {     
    FileWritingMessageHandler handler = new FileWritingMessageHandler(new File("C:/Output_dir"));
    handler.setDeleteSourceFiles(false);
    handler.setExpectReply(false);
    handler.setPreserveTimestamp(true);
    handler.setAsync(true);
    return handler;
}

我期待的是:
- 如果任何源文件中有任何更改或
- 如果在源目录中创建新文件
更新或新创建的文件将在10秒内更新/创建在目标文件夹中。但是,以KB为单位的文件大小超过1分钟。此外,源和目标目录位于同一台计算机上。 当我将@Poller设置为10秒时,我无法确定为什么花费超过1分钟

日志 -

[2017-01-31 10:33:04,943612]INFO [task-scheduler-3]  (FileReadingMessageSource.java:367) - Created message: [GenericMessage [payload=C:/input_dir/file.170126.19, headers={timestamp=1485876784308, id=662aaf51-91e5-6f78-a2a6-997fc01b8b79}]]<br>
[2017-01-31 10:33:04,943612]DEBUG[task-scheduler-3]  (AbstractPollingEndpoint.java:267) - Poll resulted in Message: GenericMessage [payload=C:/input_dir/file.170126.19, headers={timestamp=1485876784308, id=662aaf51-91e5-6f78-a2a6-997fc01b8b79}]<br>
[2017-01-31 10:33:04,943612]DEBUG[task-scheduler-3]  (AbstractMessageChannel.java:411) - preSend on channel 'fileInputChannel', message: GenericMessage [payload=C:/input_dir/file.170126.19, headers={timestamp=1485876784308, id=662aaf51-91e5-6f78-a2a6-997fc01b8b79}]<br>
[2017-01-31 10:33:04,943612]DEBUG[task-scheduler-3]  (AbstractMessageHandler.java:115) - handle received message: GenericMessage [payload=C:/input_dir/file.170126.19, headers={timestamp=1485876784308, id=662aaf51-91e5-6f78-a2a6-997fc01b8b79}]<br>
[2017-01-31 10:33:04,943618]DEBUG[task-scheduler-3]  (AbstractMessageChannel.java:430) - postSend (sent=true) on channel 'fileInputChannel', message: GenericMessage [payload=C:/input_dir/file.170126.19, headers={timestamp=1485876784308, id=662aaf51-91e5-6f78-a2a6-997fc01b8b79}]<br>
[2017-01-31 10:33:14,953620]INFO [task-scheduler-4]  (FileReadingMessageSource.java:367) - Created message: [GenericMessage [payload=C:/input_dir/file.170127.19, headers={timestamp=1485876794316, id=c05deaec-f863-fd7f-0b08-dd3534be81d7}]]<br>
[2017-01-31 10:33:14,953620]DEBUG[task-scheduler-4]  (AbstractPollingEndpoint.java:267) - Poll resulted in Message: GenericMessage [payload=C:/input_dir/file.170127.19, headers={timestamp=1485876794316, id=c05deaec-f863-fd7f-0b08-dd3534be81d7}]<br>
[2017-01-31 10:33:14,953620]DEBUG[task-scheduler-4]  (AbstractMessageChannel.java:411) - preSend on channel 'fileInputChannel', message: GenericMessage [payload=C:/input_dir/file.170127.19, headers={timestamp=1485876794316, id=c05deaec-f863-fd7f-0b08-dd3534be81d7}]<br>
[2017-01-31 10:33:14,953620]DEBUG[task-scheduler-4]  (AbstractMessageHandler.java:115) - handle received message: GenericMessage [payload=C:/input_dir/file.170127.19, headers={timestamp=1485876794316, id=c05deaec-f863-fd7f-0b08-dd3534be81d7}]<br>
[2017-01-31 10:33:14,953626]DEBUG[task-scheduler-4]  (AbstractMessageChannel.java:430) - postSend (sent=true) on channel 'fileInputChannel', message: GenericMessage [payload=C:/input_dir/file.170127.19, headers={timestamp=1485876794316, id=c05deaec-f863-fd7f-0b08-dd3534be81d7}]

1 个答案:

答案 0 :(得分:1)

行。我得到了你的关注!

看,@Poller有这个属性:

/**
 * @return The maximum number of messages to receive for each poll.
 * Can be specified as 'property placeholder', e.g. {@code ${poller.maxMessagesPerPoll}}.
 * Defaults to -1 (infinity) for polling consumers and 1 for polling inbound channel adapters.
 */
String maxMessagesPerPoll() default "";

注意它默认为“1用于轮询入站通道适配器”。

因此,要在每个轮询任务中轮询所有文件,您确实应该将此属性设置为无穷大:

@Poller(maxMessagesPerPoll = "-1")