La tecnologia cambia costantemente giorno dopo giorno. A volte, ci viene richiesto di eseguire periodicamente un lavoro sul server. L'esecuzione manuale del lavoro sul server è un'attività difficile, pertanto non può essere eseguita più volte dall'utente o dall'amministratore. Per risolvere questo problema, Cron aiuta il programmatore a eseguire periodicamente un lavoro sul server. È ampiamente utilizzato per la manutenzione e l'ammirazione automatizzata del sistema. Oltre a questo, possiamo anche usare Espressione cron nello sviluppo web. Esistono molte situazioni in cui un'applicazione Web potrebbe dover eseguire periodicamente una determinata attività.
In questa sezione discuteremo di Espressioni Java Cron , sta funzionando e l'implementazione è in corso Programmatore Java Quartz .
Cos'è Cron?
Fondamentalmente, Cron è un'utilità che pianifica un'attività. Consente all'utente di pianificare periodicamente un'attività all'ora, alla data, al mese, al mese e all'anno specificati. È ampiamente utilizzato nei processi automatizzati in cui non è richiesto l'intervento umano.
Espressione Cron
In Java, le espressioni Cron vengono utilizzate per configurare le istanze di CronTrigger classe. È una sottoclasse di org.quartz.Trigger classe. Un'espressione Cron è una stringa o un'espressione composta da sei o sette campi (unità di tempo). Descrive i singoli dettagli della pianificazione e del comando.
Un'espressione cron può essere semplice o complessa. Per esempio,
Semplice: * * * * ? * (l'asterisco indica i campi)
Complesso: 0 0/4 12,15,3-35,52 ? Maggio, giugno, luglio MAR-SAB 2002-2010.
converti str in intero
Inoltre, tieni presente che un'espressione Cron può essere scritta in diversi stili, come segue. Ad esempio, le seguenti tre espressioni Cron hanno lo stesso significato.
- 0 10 9 ? * *
- 0 10 9 * * ?
- 0 10 9 * * ? *
Tutte e tre le espressioni vengono eseguite ogni giorno alle 9:10.
Campi utilizzati nell'espressione Cron
Nelle espressioni Cron, l'unità di tempo è nota come campo . Questi sono separati da uno spazio bianco e possono contenere qualsiasi valore consentito con varie combinazioni dei caratteri consentiti per quel campo. Mostra i campi nell'ordine previsto. La tabella seguente illustra l'unità di tempo, i valori corrispondenti e i simboli che possono essere utilizzati con le espressioni.
Nome del campo | Necessario | Valori consentiti | Caratteri speciali e simboli consentiti con i campi |
---|---|---|---|
Secondi | SÌ | 0-59 | , - * / |
Minuti | SÌ | 0-59 | , - * / |
Ore | SÌ | 0-23 | , - * / |
Giorno del mese | SÌ | -31 | , - * ? / L W C |
Mese | SÌ | 0-11 o GEN-DIC | , - * / |
Giorno della settimana | SÌ | 1-7 o DOM-SAB | , - * ? /LC# |
Anno | Opzionale | vuoto o 1970-2099 | , - * / |
Simboli e lettere speciali utilizzati nell'espressione Cron
Asterisco (*): Il simbolo viene utilizzato quando vogliamo eseguire l'evento in ogni unità di tempo (minuto, secondo, ora). Ad esempio, se * viene utilizzato con l'unità di tempo dei minuti, significa che un evento verrà eseguito automaticamente ogni minuto.
come creare un array in Java
Punto interrogativo (?): Il simbolo viene utilizzato nei campi come giorno del mese e giorno della settimana. Indica il valore arbitrario e ignora il valore del campo. Supponiamo di voler eseguire uno script il 2 di ogni mese senza preoccuparci di quale giorno della settimana cade il 2 del mese. In questo caso, dovremmo specificare il simbolo del punto interrogativo ( ?) nel campo del giorno della settimana.
Trattino (-): Il simbolo viene utilizzato per specificare l'intervallo. Determina l'intervallo di valori. Ad esempio, se un campo ora è definito come , significa che un evento verrà eseguito alla 4a e alla 5a ora.
Virgola (,): Viene utilizzato per definire i valori dei campi separati da virgola. Ad esempio, venerdì, sabato, domenica, ecc.
Barra (/): Viene utilizzato per incrementare i valori dell'unità di tempo specificata. Supponiamo di voler avviare un evento a 10 minuti, dopodiché dobbiamo eseguire lo stesso evento a 20 minuti, l'esecuzione successiva a 30 minuti e così via. In questo caso specifichiamo l'ora di inizio e il valore incrementale, separati da una barra.
Ad esempio, se 10/10 in specificato nel campo dei minuti, significa che il primo evento verrà eseguito a 10 minuti e l'esecuzione successiva sarà a 20 minuti di un'ora, quindi no.
L (Ultimo): L'uso di L ha significati diversi in vari campi.
vlc scarica youtube
- Se è stato utilizzato in campo, indica l'ultimo giorno del mese, secondo il calendario.
- Se è stato utilizzato con un valore di offset come L-5 . Indica il 5thall'ultimo giorno del mese solare.
- Se è stato utilizzato in campo, indica l'ultimo giorno della settimana. Può essere utilizzato anche con altri valori nel campo. Per esempio, 7 litri denota il sabato scorso .
IN: Quest'ultimo rappresenta i giorni feriali (dal lunedì al venerdì). Determina il giorno della settimana più vicino al giorno del mese specificato.
Ad esempio, se specifichiamo 5 W nel campo del giorno del mese significa che si determina il giorno della settimana vicino alle 5thdel mese.
- Se il 5thdel mese è Sabato , si attiverà un evento 9th del mese.
- Se il 5thdel mese è Domenica , si attiverà un evento undicith del mese.
Potrebbe esistere un altro caso. Supponiamo , 1stdel mese è sabato, il 3 si verificherà un eventorddel mese. Significa che l'evento o lo script non verranno eseguiti nel mese precedente.
Cancelletto (#): Rappresenta l'ennesima occorrenza di un giorno feriale del mese. Ad esempio, il terzo venerdì del mese può essere indicato come 6#3 .
Perché dovremmo usare le espressioni cron?
Esistono vari motivi per utilizzare le espressioni cron. Alcuni di loro sono:
- Possiamo far scadere e cancellare i file di dati memorizzati nella cache a determinati intervalli.
- Possiamo programmare news letter ed e-mail giornaliere.
- Possiamo pianificare attività a lunga esecuzione da eseguire da uno script da riga di comando, anziché eseguirle da uno script web. Come la codifica di video o l'invio di e-mail in massa.
Esempio di espressioni Cron
Vediamo alcune espressioni comuni di Cron che utilizzano simboli e campi speciali.
Espressione Cron | Significato delle espressioni Cron |
---|---|
0 12 * * ? | Indica che un lavoro verrà eseguito ogni giorno alle 12:00 (mezzogiorno). |
0/5 13.18 * * ? | Indica che un processo verrà eseguito ogni cinque minuti a partire dalle 13:00 e termina alle 13:55, quindi a partire dalle 18:00 e termina alle 18:55, ogni giorno. |
0-5 13 * * ? | Indica che un lavoro verrà eseguito ogni minuto, a partire dalle 13:00 e terminando alle 13:05, ogni giorno. |
15,4513? 6 mar | Indica che un processo verrà eseguito alle 13:15 e alle 13:45 ogni martedì del mese di giugno. |
30 9? *LUN-VEN | Indica che un lavoro verrà eseguito alle 9:30 ogni lunedì, martedì, mercoledì, giovedì e venerdì. |
30 9 15 * ? | Indica che un lavoro verrà eseguito alle 9:30 del quindicesimo giorno di ogni mese. |
0 18 litri * ? | Indica che un lavoro verrà eseguito alle 18:00 dell'ultimo giorno di ogni mese. |
0 18 L-3 * ? | Indica che un lavoro verrà eseguito alle 18:00 del terzultimo giorno di ogni mese. |
3010? *5 litri | Indica che un processo verrà eseguito alle 10:30 dell'ultimo giovedì di ogni mese. |
010? *23 | Indica che un processo verrà eseguito alle 10:00 del terzo lunedì di ogni mese. |
0 0 10/5 * ? | Indica che un lavoro verrà eseguito a mezzanotte di ogni giorno per cinque giorni a partire dal 10 del mese. |
0 11 11 11 11 ? | Indica che un lavoro verrà eseguito ogni 11 novembre alle 11:11 |
0 15 10 ? *6L 2002-2005 | Attiva alle 10:15 ogni ultimo venerdì di ogni mese negli anni 2002, 2003, 2004 e 2005. |
0 0 0 ? * IL MIO#1 | Indica che un lavoro verrà eseguito il primo lunedì del mese a mezzanotte. |
0 0 0 LW * * | Indica che un lavoro verrà eseguito l'ultimo giorno feriale del mese a mezzanotte. |
0 0/30 8-10 * * * | Indica che un lavoro verrà eseguito alle 8:00, 8:30, 9:00, 9:30, 10:00 e 10:30 ogni giorno. |
Impostazione speciale nelle espressioni Cron
Oltre al simbolo speciale di cui sopra, l'espressione Cron supporta anche alcuni valori speciali predefiniti. Questi valori possono essere utilizzati al posto dei campi.
Utilizzo dell'espressione Cron in Java
Java fornisce un sistema di pianificazione dei lavori open source che pianifica un lavoro per un'unità di tempo specifica. Possiamo scaricare lo scheduler Quartz dal sito ufficiale.
In termini di programmazione, job è una classe che contiene l'attività da eseguire. Ma la domanda è come programmarlo. Per pianificare un lavoro, definiamo un trigger e specifichiamo quando il lavoro verrà eseguito.
Se vogliamo implementare lo scheduler Quartz, possiamo aggiungere la dipendenza, come segue:
org.quartz-scheduler quartz 2.2.1
Nota: prima di eseguire il seguente programma Java, assicurarsi di aver aggiunto quarzo-2.2.1.vaso file nel percorso, altrimenti riceverai un errore.
Vediamo l'implementazione dell'espressione e del job cron tramite un programma Java.
Passo 1: Crea un progetto Maven. Abbiamo creato con il nome CronEsempio .
Passo 2: All'interno del progetto, crea due pacchetti vale a dire com.javatpoint.app E com.javatpoint.job . Nel primo pacchetto definiremo la classe principale e nel secondo pacchetto definiremo i lavori (nel nostro caso il numero di lavori è cinque).
operatore Java
Passaggio 3: Nel file pom.xml incolla la seguente dipendenza. Scarica automaticamente i file JAR richiesti per il progetto. Il file pom è simile al seguente:
4.0.0 com.javacodegeeks.snippets.enterprise quartzexample 0.0.1-SNAPSHOT org.quartz-scheduler quartz 2.2.1
Passaggio 4: Crea cinque lavori (nel pacchetto com.javatpoint.job) che desideri eseguire. Nel nostro caso, abbiamo definito i seguenti cinque lavori.
Lavoro1.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()); } }
Passaggio 5: Crea la classe principale con il nome MyApp.
MiaApp.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(); } } }
Una volta terminati tutti i passaggi precedenti, la directory del progetto è simile alla seguente:
è uguale alla stringa in Java
Passaggio 6: Esegui il programma Java sopra per vedere l'output.
Osserviamo che ogni lavoro viene eseguito a intervalli di tempo specifici.