我必須進行批處理才能使業務流程自動化。我必須定期輪詢目錄以檢測新文件並進行處理。在處理舊文件時,新文件可以進入。現在,我使用quartz調度程序和線程同步來確保只有一個線程可以處理文件。代碼目錄輪詢的最佳做法
部分爲:
應用程序的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;
}
}
}
}
對於當前的代碼,當一個線程正在處理時,我必須阻止其他線程處理文件。這是一個好主意嗎 ?或者我們支持多線程處理。在那種情況下,我怎麼知道哪些文件正在處理以及哪些文件剛剛到達?任何想法真的很感激。
您標記這個C#,但你的代碼看起來像Java。請確保您指定了正確的語言和操作系統。 – Gabe 2010-03-08 10:30:53
它看起來像其他人錯誤地放在C#標記,所以我改變它爲Java。不過,我們需要知道操作系統才能給出有用的答案。 – Gabe 2010-03-08 11:01:17
感謝gabe,它是在java中的批處理。你如何格式化代碼? – 2010-03-08 17:15:35