Inhaltsverzeichnis
Anleitung zur Verwendung geplanter Aufgaben
1、引入依赖
2、快速上手
3、手动触发定时任务
4、带参数任务
5、任务并发
Heim Java javaLernprogramm Wie verwende ich Quartz, um geplante Java-Aufgaben mit hoher Verfügbarkeit zu implementieren?

Wie verwende ich Quartz, um geplante Java-Aufgaben mit hoher Verfügbarkeit zu implementieren?

May 07, 2023 pm 12:55 PM
java quartz

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>
Nach dem Login kopieren

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());
    }
}
Nach dem Login kopieren

3、手动触发定时任务

定时任务除了以既有频率周期性运行外,还有通过接口手动被触发的能力。

调用如下接口,可手动触发任务ID编号为jobId的任务。

http://localhost:8080/cms-api/quartz/job/{jobId}

如果有手动触发定时任务的需求,则需要任务ID唯一并已知,因此需要在编写定时任务时手动指定。

@CronExp(id = 1, cron = "0/5 * * * * ?")
Nach dem Login kopieren

通过注解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);
}
Nach dem Login kopieren

在编写定时任务时,可从JobExecutionContext对象中解析一个Map,从而完成参数的注入。

http://localhost:8080/cms-api/quartz/job/1?key=a
Nach dem Login kopieren

上述http调用的含义是手动触发任务ID为【1】的任务,并且向其传递参数为【key】值为【a】的参数。

5、任务并发

本框架不支持任务并发,换句话说并发对定时任务不利,因此需要手动禁止。

需要注意的是Quartz的并发是指当任务执行耗时超过任务调度周期时,上一个任务未执行完,新任务是否执行。

一般来说需要显示禁止并发,在任务类上添加注解DisallowConcurrentExecution

Das Modul für geplante Aufgaben kapselt das Quartz-Framework weiter und vereinfacht die Verwendung.

1. Abhängigkeiten einführen

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
Nach dem Login kopieren
2. Schnell loslegen

Implementieren Sie die 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.
rrreee

3. Geplante Aufgaben manuell auslösen

Geplante 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-Nummer 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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

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

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

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

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

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.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

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

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

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.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

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

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

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.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

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

Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Oct 13, 2024 pm 01:32 PM

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.

See all articles