2017-01-30 2 views
1

я использую следующую конфигурацию, чтобы скопировать файлы из одного каталога в другой каталог -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 секунд. Однако он занимает более 1 минуты и размер файла в КБ. Кроме того, исходные и целевые каталоги находятся на одной машине. Я не в состоянии определить, почему она занимает более 1 минуты, когда я установил @Poller времени 10 секунд


журналы -

[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

Включите протоколирования DEBUG для o.s.i. –

+1

Просто протестировал ваш случай использования на Windows. Файлы «путешествуют» от dir до dir именно в течение этих 10 секунд ... –

+1

Спасибо, что посмотрели на это. Журналы DEBUG показывают, что между каждым файлом имеется интервал в 10 секунд. Поэтому, если у нас есть 1000 файлов в каталоге ввода и обновлены любые файлы, то возможно, что измененный файл будет отображаться на месте назначения через 10 * 1000 секунд. – Sushil

ответ

1

OK. Я беспокоюсь!

Посмотрите, @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") 
Смежные вопросы