


Wie verwende ich Quartz, um geplante Java-Aufgaben mit hoher Verfügbarkeit zu implementieren?
Anleitung zur Verwendung geplanter Aufgaben
Wenn Sie geplante Aufgaben erledigen möchten, hohe Verfügbarkeit
-Anforderungen haben oder einfach nur schnell loslegen
und einfach loslegen möchten, dann sind Sie hier genau richtig Es ist richtig, es zu wählen. 高可用
方面的需求,或者仅仅想入门快
,上手简单,那么选用它准没错。
定时任务模块是对Quartz框架进一步封装,使用更加简洁。
1、引入依赖
<dependency> <groupId>xin.altitude.cms</groupId> <artifactId>ucode-cms-quartz</artifactId> <version>1.5.4.1</version> </dependency>
2、快速上手
实现org.quartz.Job
接口;使用注解CronExp
添加任务的调度策略;使用注解Component
将任务注入容器中。
启动项目,定时任务便处于监听与运行中。
@Component @DisallowConcurrentExecution @CronExp(cron = "0/5 * * * * ?") public class DemoJob implements Job { @Override public void execute(JobExecutionContext context) { System.out.println("任务1:" + LocalDateTime.now()); } }
3、手动触发定时任务
定时任务除了以既有频率周期性运行外,还有通过接口手动被触发的能力。
调用如下接口,可手动触发任务ID编号为jobId
的任务。
http://localhost:8080/cms-api/quartz/job/{jobId}
如果有手动触发定时任务的需求,则需要任务ID唯一并
且已知
,因此需要在编写定时任务时手动指定。
@CronExp(id = 1, cron = "0/5 * * * * ?")
通过注解CronExp
的id属性可指定任务ID,不显示指定则使用随机ID,不满足已知的条件,因此无法手动触发。
4、带参数任务
尽管大多数任务不需要注入参数,但仍有少量的场景需要向定时任务注入参数。
public void execute(JobExecutionContext context) { /* 如果在调用任务时传入了参数,则能够从Map中获取 */ Map<String, Object> dataMap = context.getMergedJobDataMap(); /* 比如从Map中获取一个键值对,一般来说参数均为基本数据类型 */ Object key = dataMap.get("key"); System.out.println("任务2:" + LocalDateTime.now() + ": " + key); }
在编写定时任务时,可从JobExecutionContext
对象中解析一个Map,从而完成参数的注入。
http://localhost:8080/cms-api/quartz/job/1?key=a
上述http调用的含义是手动触发任务ID为【1】的任务,并且向其传递参数为【key】值为【a】的参数。
5、任务并发
本框架不支持任务并发,换句话说并发对定时任务不利,因此需要手动禁止。
需要注意的是Quartz
的并发是指当任务执行耗时超过任务调度周期时,上一个任务未执行完,新任务是否执行。
一般来说需要显示禁止并发,在任务类上添加注解DisallowConcurrentExecution
spring: quartz: properties: org.quartz.jobStore.isClustered: true org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.dataSource: qzDS org.quartz.dataSource.qzDS.driver: com.mysql.cj.jdbc.Driver org.quartz.dataSource.qzDS.URL: jdbc:mysql://localhost:3306/quartz-demo org.quartz.dataSource.qzDS.user: root org.quartz.dataSource.qzDS.password: 123456
org.quartz.Job
-Schnittstelle; Verwenden Sie die Annotation Component
, um Aufgaben in den Container einzufügen. Starten Sie das Projekt und die geplanten Aufgaben werden überwacht und ausgeführt. rrreeeGeplante Aufgaben können nicht nur regelmäßig mit der vorhandenen Häufigkeit ausgeführt werden, sondern auch manuell über die Schnittstelle ausgelöst werden. 🎜🎜Rufen Sie die folgende Schnittstelle auf, um die Aufgabe manuell mit der Aufgaben-ID-Nummer3. Geplante Aufgaben manuell auslösen
jobId
auszulösen. 🎜🎜http://localhost:8080/cms-api/quartz/job/{jobId}
🎜🎜Wenn eine geplante Aufgabe manuell ausgelöst werden muss, muss die Aufgaben-ID unique and
code> und ist bekannt
, daher muss er beim Schreiben einer geplanten Aufgabe manuell angegeben werden. 🎜rrreee🎜Sie können die Aufgaben-ID angeben, indem Sie das id-Attribut von CronExp
mit Anmerkungen versehen. Wenn Sie sie nicht explizit angeben, wird eine zufällige ID verwendet. Sie erfüllt die bekannten Bedingungen nicht manuell ausgelöst werden. 🎜🎜4. Aufgaben mit Parametern🎜🎜Obwohl die meisten Aufgaben keine Parameter einfügen müssen, gibt es dennoch eine kleine Anzahl von Szenarien, die das Einfügen von Parametern in geplante Aufgaben erfordern. 🎜rrreee🎜Wenn Sie eine geplante Aufgabe schreiben, können Sie eine Map aus dem JobExecutionContext
-Objekt analysieren, um die Injektion von Parametern abzuschließen. 🎜rrreee🎜Die Bedeutung des obigen http-Aufrufs besteht darin, die Aufgabe manuell mit der Aufgaben-ID [1] auszulösen und ihr den Parameter [Schlüssel] mit dem Wert [a] zu übergeben. 🎜🎜5. Task-Parallelität🎜🎜Dieses Framework unterstützt keine Task-Parallelität. Mit anderen Worten: Parallelität ist für geplante Aufgaben nicht geeignet und muss daher manuell deaktiviert werden. 🎜🎜Es ist zu beachten, dass sich die Parallelität von Quartz
darauf bezieht, ob die neue Aufgabe ausgeführt wird, wenn die Aufgabenausführungszeit den Aufgabenplanungszyklus überschreitet und die vorherige Aufgabe nicht ausgeführt wurde. 🎜🎜 Im Allgemeinen ist es notwendig, das Verbot der Parallelität anzuzeigen. Fügen Sie der Task-Klasse die Anmerkung DisallowConcurrentExecution
hinzu, um die Task-Parallelität zu deaktivieren. 🎜🎜6. Persistenz🎜🎜Wenn für die geplante Aufgabe hohe Verfügbarkeitsanforderungen gelten, muss die Aufgabe beibehalten werden. Nachdem die Daten der geplanten Aufgabe in der Datenbank gespeichert wurden, können mehrere Anwendungen geöffnet werden. Nach der dauerhaften Bereitstellung geplanter Aufgaben auf mehreren Knoten hat ein Ausfall eines einzelnen Knotens im Cluster keine Auswirkungen auf die Ausführung geplanter Aufgaben. 🎜🎜Zeitgesteuerte Aufgabenpersistenz: Sie müssen nur die YML-Dateikonfiguration ändern, um das Ziel zu erreichen, ohne den Code zu ändern. Im Allgemeinen wird MySQL als persistenter Container verwendet. 🎜rrreee🎜Mit Ausnahme der Änderung der fünf Parameter Host, Port, Datenbankname, Benutzername und Passwort verwenden Sie für die anderen Parameter die Standardwerte. 🎜🎜🎜Verwenden Sie nach der Konfiguration der Datenbankverbindung das SQL-Skript und achten Sie auf die Initialisierung der Datenbank🎜🎜Das obige ist der detaillierte Inhalt vonWie verwende ich Quartz, um geplante Java-Aufgaben mit hoher Verfügbarkeit zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.
