ビジネスプロセスを自動化するためにバッチ処理を行う必要があります。新しいファイルを検出して処理を行うために、定期的にディレクトリをポーリングする必要があります。古いファイルが処理されている間に、新しいファイルが入ってきます。今のところ、Quartz スケジューラとスレッド同期を使用して、1 つのスレッドだけがファイルを処理できるようにしています。
コードの一部は次のとおりです。
アプリケーションコンテキスト.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;
}
}
}
}
現在のコードでは、1 つのスレッドが処理しているときに他のスレッドがファイルを処理できないようにする必要があります。それは良い考えですか?または、マルチスレッド処理をサポートしています。その場合、どのファイルが処理中で、どのファイルが到着したかをどのように知ることができますか? どんなアイデアでも大歓迎です。