logo

Expression Java Cron

La technologie évolue constamment de jour en jour. Parfois, nous sommes amenés à exécuter périodiquement un travail sur le serveur. L'exécution manuelle du travail sur le serveur est une tâche difficile et ne peut donc pas être effectuée plusieurs fois par l'utilisateur ou l'administrateur. Afin de résoudre ce problème, Cron aide le programmeur à exécuter périodiquement un travail sur le serveur. Il est largement utilisé pour la maintenance et l'admiration des systèmes automatisés. A côté de cela, nous pouvons également utiliser Expression Cron dans le développement web. Il existe de nombreuses situations dans lesquelles une application Web peut devoir exécuter périodiquement une certaine tâche.

Dans cette section, nous aborderons les Expressions Java Cron , cela fonctionne et est mis en œuvre grâce à Planificateur Java Quartz .

Qu’est-ce que Cron ?

Fondamentalement, Cron est un utilitaire qui planifie une tâche. Il permet à l'utilisateur de planifier une tâche périodiquement à une heure, une date, un mois, une faiblesse et une année spécifiés. Il est largement utilisé dans les processus automatisés où aucune intervention humaine n’est requise.

Expression Cron Java

Expression Cron

En Java, les expressions Cron sont utilisées pour configurer les instances du Déclencheur Cron classe. C'est une sous-classe de org.quartz.Trigger classe. Une expression Cron est une chaîne ou une expression composée de six ou sept champs (unité de temps). Il décrit les détails individuels du calendrier et de la commande.

 

Une expression cron peut aussi bien être simple que complexe. Par exemple,

Simple: * * * * ? * (l'astérisque désigne les champs)

Complexe: 0 0/4 12,15,3-35,52 ? Mai,juin,juillet MAR-SAM 2002-2010.

Notez également qu'une expression Cron peut être écrite dans différents styles, comme suit. Par exemple, les trois expressions Cron suivantes ont la même signification.

  • 0 10 9 ? * *
  • 0 10 9 * * ?
  • 0 10 9 * * ? *

Les trois expressions sont exécutées à 9h10 tous les jours.

algorithme k-nn

Champs utilisés dans l'expression Cron

Dans les expressions Cron, l'unité de temps est appelée champ . Celles-ci sont séparées par des espaces blancs et peuvent contenir n'importe laquelle des valeurs autorisées avec diverses combinaisons de caractères autorisés pour ce champ. Il affiche les champs dans l'ordre attendu. Le tableau suivant décrit l'unité de temps et les valeurs correspondantes, ainsi que les symboles pouvant être utilisés avec les expressions.

Nom de domaine Requis Valeurs autorisées Caractères spéciaux et symboles autorisés avec des champs
Secondes Oui 0-59 , - * /
Minutes Oui 0-59 , - * /
Heures Oui 0-23 , - * /
Jour du mois Oui -31 , - * ? / LWC
Mois Oui 0-11 ou JAN-DÉC , - * /
Jour de la semaine Oui 1-7 ou DIM-SAT , - * ? / L C #
Année Facultatif vide ou 1970-2099 , - * /

Symboles et lettres spéciaux utilisés dans l'expression Cron

Astérisque (*): Le symbole est utilisé lorsque nous voulons exécuter un événement à chaque unité de temps (minute, seconde, heure). Par exemple, si * est utilisé avec l’unité de temps minute, cela signifie qu’un événement s’exécutera automatiquement toutes les minutes.

Point d'interrogation (?): Le symbole est utilisé dans les champs comme le jour du mois et le jour de la semaine. Il désigne la valeur arbitraire et ignore la valeur des champs. Supposons que nous souhaitions exécuter un script le 2 de chaque mois sans nous soucier du jour de la semaine qui tombe le 2 du mois. Dans ce cas, nous devrions spécifier un symbole de point d'interrogation ( ?) dans le champ jour de la semaine.

Trait d'union (-): Le symbole est utilisé pour spécifier la plage. Il détermine la plage de valeurs. Par exemple, si un champ d'heure est défini comme , signifie qu'un événement s'exécutera à la 4ème et à la 5ème heure.

Virgule (,): Il permet de définir les valeurs des champs séparées par des virgules. Par exemple, vendredi, samedi, dimanche, etc.

Barre oblique (/) : Il est utilisé pour incrémenter les valeurs de l'unité de temps spécifiée. Supposons que nous souhaitions démarrer un événement à 10 minutes, après quoi nous devons exécuter le même événement à 20 minutes, la prochaine exécution à 30 minutes, et ainsi de suite. Dans ce cas, nous spécifions l'heure de début et la valeur incrémentielle, séparées par une barre oblique.

Par exemple, si 10/10 dans le champ des minutes, cela signifie que le premier événement s'exécutera à 10 minutes et que la prochaine exécution aura lieu à 20 minutes d'une heure, et donc non.

L (dernier) : L'utilisation de L a une signification différente selon les domaines.

interface graphique C++
  • S'il a été utilisé dans le champ, il désigne le dernier jour du mois, selon le calendrier.
  • S'il a été utilisé avec une valeur de décalage telle que L-5 . Il désigne le 5èmeau dernier jour du mois civil.
  • S'il a été utilisé dans le champ, il indique le dernier jour de la semaine. Il peut également être utilisé avec d’autres valeurs sur le terrain. Par exemple, 7L désigne le samedi dernier .

DANS: Ce dernier représente les jours de la semaine (du lundi au vendredi). Il détermine le jour de la semaine le plus proche du jour spécifié du mois.

Par exemple, si l'on précise 5W dans le champ jour du mois, cela signifie que nous déterminons le jour de la semaine proche du 5èmedu mois.

  • Si le 5èmedu mois est Samedi , un événement se déclenchera sur 9ème du mois.
  • Si le 5èmedu mois est Dimanche , un événement se déclenchera sur onzeème du mois.

Il peut exister un autre cas. Supposer , 1Stdu mois est le samedi, un événement se produira le 3rddu mois. Cela signifie que l'événement ou le script ne s'exécutera pas le mois précédent.

Hachage (#) : Il représente la nième occurrence d'un jour de semaine du mois. Par exemple, le troisième vendredi du mois peut être indiqué comme 6#3 .

Pourquoi devrions-nous utiliser des expressions cron ?

Il existe plusieurs raisons d'utiliser les expressions cron. Certains d'entre eux sont:

  • Nous pouvons expirer et effacer les fichiers de données mis en cache à certains intervalles.
  • Nous pouvons programmer des lettres d'information et des e-mails quotidiens.
  • Nous pouvons planifier l'exécution de tâches de longue durée à partir d'un script de ligne de commande, plutôt que de les exécuter à partir d'un script Web. Comme encoder des vidéos ou envoyer des e-mails en masse.

Exemple d'expressions Cron

Voyons quelques expressions Cron courantes qui utilisent des symboles et des champs spéciaux.

Expression Cron Signification des expressions Cron
0 12 * * ? Cela indique qu'une tâche sera exécutée à 12h00 (midi) tous les jours.
0/5 13.18 * * ? Cela indique qu'une tâche s'exécutera toutes les cinq minutes à partir de 13 h 00 et se terminera à 13 h 55, puis à partir de 18 h 00 et se terminera à 18 h 55, tous les jours.
0-5 13 * * ? Cela indique qu'une tâche sera exécutée toutes les minutes, à partir de 13 heures et se terminant à 13 h 05, chaque jour.
15,45 13 ? 6 mar. Cela indique qu'une tâche sera exécutée à 13h15 et 13h45 tous les mardis du mois de juin.
30 9 ? * MON-FRI Cela indique qu'une tâche sera exécutée à 9h30 tous les lundis, mardis, mercredis, jeudis et vendredis.
30 9 15 * ? Cela indique qu'une tâche sera exécutée à 9h30 le 15 de chaque mois.
0 18 L * ? Cela indique qu'une tâche sera exécutée à 18 heures le dernier jour de chaque mois.
0 18 L-3 * ? Cela indique qu'une tâche sera exécutée à 18 heures du troisième au dernier jour de chaque mois.
30 10 ? *5L Cela indique qu'une tâche sera exécutée à 10h30 le dernier jeudi de chaque mois.
0 10 ? * 23 Cela indique qu'une tâche sera exécutée à 10 heures du matin le troisième lundi de chaque mois.
0 0 10/5 * ? Cela signifie qu'une tâche sera exécutée à minuit tous les jours pendant cinq jours à compter du 10e jour du mois.
0 11 11 11 11 ? Cela indique qu'une tâche sera exécutée chaque 11 novembre à 11h11.
0 15 10 ? *6L 2002-2005 Incendie à 10h15 le dernier vendredi de chaque mois au cours des années 2002, 2003, 2004 et 2005.
0 0 0 ? * MON#1 Cela indique qu'une tâche sera exécutée le premier lundi du mois à minuit.
0 0 0 LW * * Cela indique qu'une tâche sera exécutée le dernier jour de la semaine du mois à minuit.
0 0/30 8-10 * * * Cela indique qu'une tâche sera exécutée à 8h00, 8h30, 9h00, 9h30, 10h00 et 10h30 tous les jours.

Paramètre spécial dans les expressions Cron

Outre le symbole spécial ci-dessus, l'expression Cron prend également en charge certaines valeurs spéciales prédéfinies. Ces valeurs peuvent être utilisées à la place des champs.

    @annuellement ou @annuellement :Il exécute un travail une fois par an. Par exemple, '0 0 0 1 1 *' .@mensuel: Il exécute le travail une fois par mois. Par exemple, '0 0 0 1 * *'. @hebdomadaire: Il exécute le travail une fois par semaine. Par exemple, '0 0 0 * * 0'. @daily ou @minuit :Il exécute le travail une fois par jour. Par exemple, '0 0 0 * * *'. @horaire: Il exécute le travail toutes les heures. Par exemple, '0 0 * * * *'.

Utiliser l'expression Cron en Java

Java fournit un système de planification de tâches open source qui planifie une tâche pour une unité de temps spécifique. Nous pouvons télécharger le planificateur Quartz depuis le site officiel.

En termes de programmation, job est une classe qui contient la tâche à exécuter. Mais la question est de savoir comment le programmer. Pour planifier une tâche, nous définissons un déclencheur et spécifions le moment où la tâche sera exécutée.

Si nous voulons implémenter le planificateur Quartz, nous pouvons ajouter la dépendance, comme suit :

convertir str en int
 org.quartz-scheduler quartz 2.2.1 

Remarque : Avant d'exécuter le programme Java suivant, assurez-vous d'avoir ajouté quartz-2.2.1.jar fichier dans le chemin, sinon vous obtiendrez une erreur.

Voyons l'implémentation de l'expression cron et du travail via un programme Java.

Étape 1: Créez un projet Maven. Nous avons créé avec le nom Exemple Cron .

Étape 2: Dans le projet, créez deux packages à savoir com.javatpoint.app et com.javatpoint.job . Dans le premier package, nous définirons la classe principale et dans le deuxième package nous définirons les jobs (dans notre cas, le nombre de jobs est de cinq).

Étape 3: Dans le fichier pom.xml, collez la dépendance suivante. Il télécharge automatiquement les fichiers JAR requis pour le projet. Le fichier pom ressemble à ceci :

 4.0.0 com.javacodegeeks.snippets.enterprise quartzexample 0.0.1-SNAPSHOT org.quartz-scheduler quartz 2.2.1 

Étape 4: Créez cinq tâches (dans le package com.javatpoint.job) que vous souhaitez exécuter. Dans notre cas, nous avons défini les cinq emplois suivants.

Job1.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job1 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job1 --->>> Hello user! Time is ' + new Date()); } } 

Job2.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job2 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job2 --->>> Hello user! Time is ' + new Date()); } } 

Job3.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job3 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job3 --->>> Hello user! Time is ' + new Date()); } } 

Job4.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job4 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job4 --->>> Hello user! Time is ' + new Date()); } } 

Job5.java

 package com.javatpoint.job; import java.util.Date; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class Job5 implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println('Job5 --->>> Hello user! Time is ' + new Date()); } } 

Étape 5 : Créez la classe principale avec le nom MyApp.

MonApp.java

 package com.javatpoint.app; import org.quartz.CronExpression; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.impl.StdSchedulerFactory; import com.javatpoint.job.Job1; import com.javatpoint.job.Job2; import com.javatpoint.job.Job3; import com.javatpoint.job.Job4; import com.javatpoint.job.Job5; public class MyApp { public static void main(String args[]) { try { JobDetail job1 = JobBuilder.newJob(Job1.class) .withIdentity('job1', 'group1').build(); Trigger trigger1 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger1', 'group1') .withSchedule(CronScheduleBuilder.cronSchedule('0/5 * * * * ?')) .build(); Scheduler scheduler1 = new StdSchedulerFactory().getScheduler(); scheduler1.start(); scheduler1.scheduleJob(job1, trigger1); JobDetail job2 = JobBuilder.newJob(Job2.class) .withIdentity('job2', 'group2').build(); Trigger trigger2 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger2', 'group2') .withSchedule(CronScheduleBuilder.cronSchedule(new CronExpression('0/7 * * * * ?'))) .build(); Scheduler scheduler2 = new StdSchedulerFactory().getScheduler(); scheduler2.start(); scheduler2.scheduleJob(job2, trigger2); JobDetail job3 = JobBuilder.newJob(Job3.class) .withIdentity('job3', 'group3').build(); Trigger trigger3 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger3', 'group3') .withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(13, 46)) .build(); Scheduler scheduler3 = new StdSchedulerFactory().getScheduler(); scheduler3.start(); scheduler3.scheduleJob(job3, trigger3); JobDetail job4 = JobBuilder.newJob(Job4.class) .withIdentity('job4', 'group4').build(); Trigger trigger4 = TriggerBuilder.newTrigger() .withIdentity('cronTrigger4', 'group4') .withSchedule(CronScheduleBuilder.weeklyOnDayAndHourAndMinute(3, 13, 46)) .build(); Scheduler scheduler4 = new StdSchedulerFactory().getScheduler(); scheduler4.start(); scheduler4.scheduleJob(job4, trigger4); JobDetail job5 = JobBuilder.newJob(Job5.class) .withIdentity('job5', 'group5').build(); Trigger trigger5 = TriggerBuilder .newTrigger().withIdentity('cronTrigger5', 'group5') .withSchedule(CronScheduleBuilder.monthlyOnDayAndHourAndMinute(28, 13, 46)) .build(); Scheduler scheduler5 = new StdSchedulerFactory().getScheduler(); scheduler5.start(); scheduler5.scheduleJob(job5, trigger5); Thread.sleep(100000); scheduler1.shutdown(); scheduler2.shutdown(); scheduler3.shutdown(); scheduler4.shutdown(); scheduler5.shutdown(); } catch (Exception e) { e.printStackTrace(); } } } 

Une fois toutes les étapes ci-dessus terminées, le répertoire du projet ressemble à ceci :

tableaux java
Expression Java Cron

Étape 6 : Exécutez le programme Java ci-dessus pour voir le résultat.

Expression Java Cron

Nous observons que chaque tâche s'exécute à un intervalle de temps spécifique.