Je dois effectuer un traitement par lots pour automatiser les processus métier. Je dois interroger le répertoire à intervalle régulier pour détecter de nouveaux dossiers et faire le traitement. Pendant le traitement des anciens fichiers, de nouveaux fichiers peuvent entrer. Pour l'instant, j'utilise le planificateur à quartz et la synchronisation des threads pour m'assurer qu'un seul thread puisse traiter les fichiers.meilleure pratique pour l'interrogation d'annuaire
Une partie du code sont:
application 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;
}
}
}
}
Pour le code actuel, Je dois empêcher d'autres threads de traiter les fichiers quand un thread est en cours de traitement. Est-ce une bonne idée ? ou nous supportons le traitement multi-thread. Dans ce cas, comment puis-je savoir quels fichiers sont en cours de traitement et quels fichiers viennent d'arriver? Toute idée est vraiment appréciée.
vous a tagué cette C#, mais votre code ressemble à Java. Assurez-vous de spécifier la langue et le système d'exploitation appropriés. – Gabe
Il semble que quelqu'un d'autre a mis par erreur la balise C#, donc je l'ai changé en Java. Pourtant, nous devons connaître le système d'exploitation pour donner une réponse utile. – Gabe
Merci gabe, c'est le traitement par lots en Java. Comment pouvez-vous formater le code? –