Mutexe
Mutexe in JobRunr verschieben Jobs, bis ein freigegebener Mutex frei ist.
Ein Mutex schließt sich gegenseitig aus. Es fungiert als Gate Keeper für eine Ressource, die es nur einem Job
ermöglicht, sie zu verwenden, und verschiebt alle anderen Jobs, die denselben “Mutex” verwenden, kostenlos.
Verwendung
Die Verwendung eines Mutex ist dank der Annotation @Job
genauso einfach wie die Verwendung von Warteschlangen und Server-Tags. Fügen Sie es einfach Ihrer Servicemethode hinzu und geben Sie den zu verwendenden Mutex an
@Job(mutex = "virus-scanner")
public void onlyProcessOneJobAtTheSameTime() {
System.out.println("This will not run parallel as it is guarded by a mutex");
}
Erweitertes Beispiel Mutexe können auch Jobparameter berücksichtigen. Im folgenden Beispiel haben wir insgesamt 3 Mutexe:
virus-scanner/LINUX
virus-scanner/WINDOWS
virus-scanner/MACOS
public void scanForVirusses(File folder) {
for(String f : folder.list()) {
scanForVirusses(f);
}
}
public void scanForVirusses(String file) {
BackgroundJob.enqueue(() -> osSpecificVirusScan("LINUX", file));
BackgroundJob.enqueue(() -> osSpecificVirusScan("WINDOWS", file));
BackgroundJob.enqueue(() -> osSpecificVirusScan("MACOS", file));
}
@Job(mutex = "virus-scanner/%0")
public void osSpecificVirusScan(String os, String file) {
System.out.println(String.format("This will result in a mutex virus-scanner/%0", os));
}
Konfiguration
Mutexe erfordern keine Konfiguration.