лучшая практика для опроса каталогов
Я должен сделать пакетную обработку, чтобы автоматизировать бизнес-процесс. Я должен регулярно опрашивать каталог, чтобы обнаружить новые файлы и выполнить обработку. Пока старые файлы обрабатываются, могут поступать новые файлы. Сейчас я использую кварцевый планировщик и синхронизацию потоков, чтобы гарантировать, что только один поток может обрабатывать файлы.
Часть кода:
Приложение-context.xml
<bean id="methodInvokingJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><br/>
<property name="targetObject" ref="documentProcessor" /><br/>
<property name="targetMethod" value="processDocuments" /><br/>
</bean>
DocumentProcessor
.....
public void processDocuments() {
LOG.info(Thread.currentThread().getName() + " attempt to run.");
if (!processing) {
synchronized (this) {
try {
processing = true;
LOG.info(Thread.currentThread().getName() + " is processing");
List<String> xmlDocuments = documentManager.getFileNamesFromFolder(incomingFolderPath);
// loop over the files and processed unlock files.
for (String xmlDocument : xmlDocuments) {
processDocument(xmlDocument);
}
}
finally {
processing = false;
}
}
}
}
Для текущего кода я должен запретить другим потокам обрабатывать файлы, когда один поток обрабатывает. Это хорошая идея ? или мы поддерживаем многопоточную обработку. В таком случае, как я могу узнать, какие файлы обрабатываются и какие файлы только что поступили? Любая идея действительно ценится.