Hallo! Als Lieferant von Schuppenschleusen bin ich super begeistert, Sie durch die Verwendung von Schuppenschloss mit Quartz Scheduler zu führen. Es wird eine wilde Fahrt, aber am Ende werden Sie ein Profi bei der Integration dieser beiden leistungsstarken Werkzeuge sein.
Lassen Sie uns zunächst darüber sprechen, was Shed Lock und Quartz Scheduler sind. Quartz Scheduler ist eine ziemlich gut bekannte Open -Quell -Job -Planungsbibliothek in der Java -Welt. Sie können Jobs in bestimmten Abständen planen, z. B. jeden Abend um 2 Uhr morgens eine Datensicherung ausführen oder jeden Freitag Newsletter aussenden. Auf der anderen Seite ist das Schleifenschloss eine Bibliothek, mit der Sie verteilte Schlösser verarbeiten können. In einem verteilten System werden möglicherweise mehrere Instanzen Ihrer Anwendung ausgeführt, und Sie müssen sicherstellen, dass ein bestimmter Job nicht gleichzeitig in verschiedenen Fällen ausgeführt wird. Hier kommt das Schuppenschloss ins Spiel.
Warum sie kombinieren?
Sie fragen sich vielleicht: "Warum muss ich mit Quartz Scheduler eine Schuppenschloss verwenden?" Nun, in einer verteilten Umgebung kann derselbe Job gleichzeitig mit dem Quartz -Scheduler in mehreren Instanzen ausgelöst werden. Dies kann zu einer ganzen Reihe von Problemen führen, wie Datenkonsistenz oder Ressourcen -Over - Nutzung. Shed Lock löst dieses Problem, indem sichergestellt wird, dass nur eine Instanz eines Jobs in allen Ihrer Anwendungsinstanzen gleichzeitig ausgeführt werden kann.
Einrichten der Umgebung
Bevor wir mit der Integration von Shed Lock in Quartz Scheduler beginnen, müssen wir unser Projekt einrichten. Wenn Sie Maven verwenden, müssen Sie Ihrem die erforderlichen Abhängigkeiten hinzufügenpom.xmlDatei. So könnte es aussehen:
<dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-spring</artifactId> <version>4.40.0</version> </dependency> <dependency> <groupId>net.javacrumbs.shedlock</groupId> <artifactId>shedlock-provider-jdbc-template</artifactId> <version> 4.40.0 </version> </abhängig> <depeopcy> <gruppe> org.quartz-Planer </Groupid> <artifactid> quartz </artifactid> <version> 2.3.2 </Version> </abhängig>
Wenn Sie Gradle verwenden, IhreBuild.gradleDie Datei sollte diese Abhängigkeiten haben:
Implementierung 'net.javacrumbs.shedlock: shedlock-ring: 4.40.0' Implementierung 'net.javacrumbs.shedlock: shedlock-provider-jdbc-template: 4.40.0' Implementierung 'org.quartz-Planer: Quack: 2.3.2'
Konfigurieren von Schuppenschloss
Sobald wir die Abhängigkeiten hinzugefügt haben, müssen wir das Schuppenschloss konfigurieren. Wir werden zunächst einen Schlossanbieter erstellen. Lassen Sie uns zum Einfachheit halber einen JDBC -basierten Sperranbieter verwenden. So können Sie es in Java machen:
import net.javacrumbs.shedlock.core.lockProvider; import net.javacrumbs.shedlock.provider.jdbctemplate.jdbctemPlatelockProvider; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.jdbc.core.jdbctemplate; importieren javax.sql.datasource; @Configuration Public Class Shedlockconfig {@Bean public LockProvider LockProvider (DataSource DataSource) {Neue jdbctemPlatelockProvider zurückgeben (jdbctemPlatelockProvider.Configuration.builder (). }}
Dieser Code erstellt aLockProviderBohne mit aJDBCTEMPLATEund das zur Verfügung gestellteDataSource. DerVerwenden von DBTime ()Die Methode stellt sicher, dass wir die Zeit der Datenbank für die Sperrverwaltung verwenden.
Integration in Quartz Scheduler
Jetzt kommt der lustige Teil - die Integration von Shed Lock in Quartz Scheduler. Wir erstellen einen einfachen Job mit Quartz und verwenden dann Shed Lock, um sicherzustellen, dass er nur einmal in allen Fällen ausgeführt wird.
Lassen Sie uns zunächst eine Quartz -Jobklasse erstellen:
import org.quartz.job; import org.quartz.jobexecutionContext; import org.quartz.jobexecutionException; import org.slf4j.logger; import org.slf4j.loggerfactory; public class myquartzjob implementiert Job {private statische endgültige Logger logger = loggerfactory.getLogger (myquartzjob.class); @Override public void execute (JobExecutionContext Context) löst JobExecutionException {logger.info aus ("myquartzjob wird ausgeführt!"); // Ihre Joblogik geht hierher}}
Als nächstes planen wir diesen Job mit Quartz und fügen Sie Shed Lock hinzu. Wir werden Spring's verwenden@GeplantAnnotation zusammen mit Schuppen Lock's@SchedulerlockAnmerkung.


import net.javacrumbs.shedlock.spring.annotation.schedulerlock; import org.quartz.jobbuilder; import org.quartz.jobdetail; import org.quartz.scheduler; import org.quartz.Schedulerexception; import org.quartz.trigger; import org.quartz.triggerbuilder; import org.springframework.beans.factory.annotation.autowired; import org.springframework.Scheduling.Annotation.Scheduled; import org.springframework.stereotype.comPonent; import Java.util.date; @Component Public Class ScheduledJobservice {@autowired Private Scheduler Scheduler; @Scheduled (FixedRate = 60000) @SchedulerLock (name = "myquartzjoblock", lockat Mostfor = "59s", lockatleastfor = "30S") public void planQuartzjob () wirft ScheduleRexception {Jobdetail -Jobdetail = Jobbuilder. . Trigger Trigger = TriggerBuilder.Newtrigger () .withIdentity ("myquartzjobtrigger", "Gruppe1") .Startat (new Date ()) .build (); Scheduler.Schedulejob (JobDetail, Trigger); }}
In diesem Code die@GeplantAnnotation plant dieplanquartzjobMethode zum Ausführen alle 60 Sekunden. Der@SchedulerlockAnnotation stellt sicher, dass nur eine Instanz dieses Jobs gleichzeitig ausgeführt werden kann. DerNameAttribut ist der Name der Sperre,Curl -postforist die maximale Zeit, die die Schloss gehalten werden kann, undLockatleast forIst die Mindestzeit, die das Schloss gehalten werden sollte.
Andere Überlegungen
Es gibt ein paar andere Dinge, die Sie bei der Verwendung von Schuppenschloss mit Quartz Scheduler berücksichtigen sollten.
- Timeout sperren: Stellen Sie sicher, dass Sie geeignete Werte für festlegen
Curl -postforUndLockatleast for. WennCurl -postforist zu kurz eingestellt, das Schloss könnte veröffentlicht werden, bevor der Job abgeschlossen ist, was zu einer gleichzeitigen Ausführung führt. Wenn es zu lang eingestellt ist, kann es zu unnötigen Verzögerungen führen. - Fehlerbehandlung: Sie sollten sowohl für Quarz- als auch für das Schuppenschloss eine angemessene Fehlerbehandlung haben. Wenn ein Fehler beim Erfassen des Schlosses oder beim Ausführen des Auftrags vorliegt, sollte Ihre Bewerbung es anmutig behandeln.
Verwandte Produkte
Wenn Sie an anderen Arten von Schlösser interessiert sind, haben wir auch einige großartige Optionen. Schauen Sie sich unser anHolztürschlossAnwesendViertelverschloss, UndSelbstverriegelungstürProdukte. Sie sind hoch - Qualität und perfekt für verschiedene Sicherheitsbedürfnisse.
Kontakt zum Kauf
Wenn Sie das Shed Lock in Ihr Quartz -Scheduler -Setup integrieren oder an einem unserer anderen Lock -Produkte interessiert sind, würden wir uns gerne unterhalten. Wenden Sie sich an uns, um Ihre Anforderungen zu besprechen und ein Angebot zu erhalten. Unser Expertenteam ist bereit, Sie dabei zu unterstützen, die besten Lösungen für Ihr Unternehmen zu finden.
Referenzen
- Quarz Scheduler Offizielle Dokumentation
- Offizielle Dokumentation des Absatzes
Also, das war's! Sie wissen jetzt, wie man Shed Lock mit Quartz Scheduler verwendet. Es mag zunächst ein bisschen komplex erscheinen, aber mit ein wenig Übung können Sie wie ein Champion verteilte Arbeitsplanung erledigen.
