Table des matières
Guide d'utilisation des tâches planifiées
1、引入依赖
2、快速上手
3、手动触发定时任务
4、带参数任务
5、任务并发
Maison Java javaDidacticiel Comment utiliser Quartz pour implémenter des tâches planifiées Java à haute disponibilité ?

Comment utiliser Quartz pour implémenter des tâches planifiées Java à haute disponibilité ?

May 07, 2023 pm 12:55 PM
java quartz

Guide d'utilisation des tâches planifiées

Si vous souhaitez effectuer des tâches planifiées, avez des exigences de haute disponibilité ou souhaitez simplement démarrer rapidement et démarrer facilement, alors vous ont raison de le choisir. 高可用方面的需求,或者仅仅想入门快,上手简单,那么选用它准没错。

定时任务模块是对Quartz框架进一步封装,使用更加简洁。

1、引入依赖

<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-quartz</artifactId>
    <version>1.5.4.1</version>
</dependency>
Copier après la connexion

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());
    }
}
Copier après la connexion

3、手动触发定时任务

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

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

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

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

@CronExp(id = 1, cron = "0/5 * * * * ?")
Copier après la connexion

通过注解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);
}
Copier après la connexion

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

http://localhost:8080/cms-api/quartz/job/1?key=a
Copier après la connexion

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

5、任务并发

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

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

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

Le module de tâches planifiées encapsule davantage le framework Quartz et le rend plus simple à utiliser.

1. Introduisez les dépendances

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
Copier après la connexion
2. Commencez rapidement

Implémentez l'interface org.quartz.Job ; utilisez l'annotation CronExp pour ajouter la stratégie de planification des tâches ; utilisez l'annotation Component pour injecter des tâches dans le conteneur.

Démarrez le projet et les tâches planifiées seront surveillées et exécutées.
rrreee

3. Déclenchez manuellement les tâches planifiées

En plus de s'exécuter périodiquement à la fréquence existante, les tâches planifiées ont également la possibilité d'être déclenchées manuellement via l'interface. 🎜🎜Appelez l'interface suivante pour déclencher manuellement la tâche avec le numéro d'identification de la tâche jobId. 🎜🎜http://localhost:8080/cms-api/quartz/job/{jobId}🎜🎜S'il est nécessaire de déclencher manuellement une tâche planifiée, l'ID de la tâche doit être unique et code> et est connu, il doit donc être spécifié manuellement lors de l'écriture d'une tâche planifiée. 🎜rrreee🎜Vous pouvez spécifier l'ID de la tâche en annotant l'attribut id de CronExp Si vous ne le spécifiez pas explicitement, un ID aléatoire sera utilisé. Il ne remplit pas les conditions connues, il ne peut donc pas. être déclenché manuellement. 🎜🎜4. Tâches avec paramètres🎜🎜Bien que la plupart des tâches n'aient pas besoin d'injecter de paramètres, il existe encore un petit nombre de scénarios qui nécessitent l'injection de paramètres dans des tâches planifiées. 🎜rrreee🎜Lors de l'écriture d'une tâche planifiée, vous pouvez analyser une carte à partir de l'objet JobExecutionContext pour terminer l'injection des paramètres. 🎜rrreee🎜La signification de l'appel http ci-dessus est de déclencher manuellement la tâche avec l'ID de tâche [1], et de lui transmettre le paramètre [key] avec la valeur [a]. 🎜🎜5. Concurrence des tâches🎜🎜Ce framework ne prend pas en charge la simultanéité des tâches. En d'autres termes, la simultanéité n'est pas bonne pour les tâches planifiées, elle doit donc être désactivée manuellement. 🎜🎜Il convient de noter que la concurrence de Quartz fait référence au fait de savoir si la nouvelle tâche sera exécutée lorsque le temps d'exécution de la tâche dépasse le cycle de planification des tâches et que la tâche précédente n'a pas été exécutée. 🎜🎜 De manière générale, il est nécessaire d'afficher l'interdiction de concurrence. Ajoutez l'annotation DisallowConcurrentExecution à la classe de tâches pour désactiver la concurrence des tâches. 🎜🎜6. Persistance🎜🎜Si la tâche planifiée a des exigences de haute disponibilité, alors la tâche doit être persistante. Une fois les données des tâches planifiées conservées dans la base de données, plusieurs applications peuvent être ouvertes. Après un déploiement persistant sur plusieurs nœuds de tâches planifiées, une défaillance d'un seul nœud dans le cluster n'affectera pas l'exécution des tâches planifiées. 🎜🎜Persistance des tâches chronométrées, il vous suffit de modifier la configuration du fichier yml pour atteindre l'objectif, sans modifier le code. De manière générale, Mysql est utilisé comme conteneur persistant. 🎜rrreee🎜À l'exception de la modification des cinq paramètres d'hôte, de port, de nom de base de données, de nom d'utilisateur et de mot de passe, utilisez les valeurs par défaut pour les autres paramètres. 🎜🎜🎜Après avoir configuré la connexion à la base de données, utilisez le script SQL et faites attention à l'initialisation de la base de données🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

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

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

Programme Java pour trouver le volume de la capsule Programme Java pour trouver le volume de la capsule Feb 07, 2025 am 11:37 AM

Les capsules sont des figures géométriques tridimensionnelles, composées d'un cylindre et d'un hémisphère aux deux extrémités. Le volume de la capsule peut être calculé en ajoutant le volume du cylindre et le volume de l'hémisphère aux deux extrémités. Ce tutoriel discutera de la façon de calculer le volume d'une capsule donnée en Java en utilisant différentes méthodes. Formule de volume de capsule La formule du volume de la capsule est la suivante: Volume de capsule = volume cylindrique volume de deux hémisphères volume dans, R: Le rayon de l'hémisphère. H: La hauteur du cylindre (à l'exclusion de l'hémisphère). Exemple 1 entrer Rayon = 5 unités Hauteur = 10 unités Sortir Volume = 1570,8 unités cubes expliquer Calculer le volume à l'aide de la formule: Volume = π × r2 × h (4

Créer l'avenir : programmation Java pour les débutants absolus Créer l'avenir : programmation Java pour les débutants absolus Oct 13, 2024 pm 01:32 PM

Java est un langage de programmation populaire qui peut être appris aussi bien par les développeurs débutants que par les développeurs expérimentés. Ce didacticiel commence par les concepts de base et progresse vers des sujets avancés. Après avoir installé le kit de développement Java, vous pouvez vous entraîner à la programmation en créant un simple programme « Hello, World ! ». Une fois que vous avez compris le code, utilisez l'invite de commande pour compiler et exécuter le programme, et « Hello, World ! » s'affichera sur la console. L'apprentissage de Java commence votre parcours de programmation et, à mesure que votre maîtrise s'approfondit, vous pouvez créer des applications plus complexes.

See all articles