Technologia zmienia się nieustannie z dnia na dzień. Czasami jesteśmy zobowiązani do okresowego wykonywania zadania na serwerze. Ręczne uruchomienie zadania na serwerze jest trudnym zadaniem, więc użytkownik lub administrator nie może tego robić wielokrotnie. Aby rozwiązać ten problem, Cron pomaga programiście w okresowym wykonywaniu zadania na serwerze. Jest szeroko stosowany do zautomatyzowanej konserwacji i podziwiania systemów. Oprócz tego możemy również użyć Wyrażenie Crona w tworzeniu stron internetowych. Istnieje wiele sytuacji, w których aplikacja internetowa może wymagać okresowego wykonywania określonego zadania.
W tej części omówimy Wyrażenia Java Cron , to działa i jest wdrażane Harmonogram Java Quartz .
Co to jest Cron?
Zasadniczo Cron to narzędzie, które planuje zadanie. Pozwala użytkownikowi zaplanować zadanie okresowo o określonej godzinie, dacie, miesiącu, słabym i roku. Jest szeroko stosowany w zautomatyzowanych procesach, w których nie jest wymagana interwencja człowieka.
Wyrażenie Crona
W Javie wyrażenia Cron służą do konfigurowania instancji CronTrigger klasa. Jest to podklasa org.quartz.Trigger klasa. Wyrażenie Cron to ciąg lub wyrażenie składające się z sześciu lub siedmiu pól (jednostka czasu). Opisuje poszczególne szczegóły harmonogramu i polecenia.
Wyrażenie cron może być proste lub złożone. Na przykład,
Prosty: * * * * ? * (gwiazdka oznacza pola)
Złożony: 0 0/4 12,15,3-35,52 ? maj, czerwiec, lipiec WT-SOB 2002-2010.
Należy również pamiętać, że wyrażenie Cron można zapisać w różnych stylach, jak poniżej. Na przykład poniższe trzy wyrażenia Cron mają to samo znaczenie.
- 0 10 9? * *
- 0 10 9 * * ?
- 0 10 9 * * ? *
Wszystkie trzy wyrażenia są wykonywane codziennie o 9:10.
uderz inaczej, jeśli
Pola używane w wyrażeniu Cron
W wyrażeniach Cron jednostka czasu jest nazywana pole . Są one oddzielone spacją i mogą zawierać dowolną z dozwolonych wartości z różnymi kombinacjami dozwolonych znaków dla tego pola. Pokazuje pola w oczekiwanej kolejności. Poniższa tabela przedstawia jednostkę czasu i odpowiadające jej wartości oraz symbole, których można używać z wyrażeniami.
Nazwa pola | Wymagany | Dozwolone wartości | Dozwolone znaki specjalne i symbole w polach |
---|---|---|---|
sekundy | Tak | 0-59 | , - * / |
Minuty | Tak | 0-59 | , - * / |
godziny | Tak | 0-23 | , - * / |
Dzień miesiąca | Tak | -31 | , - *? /LWC |
Miesiąc | Tak | 0-11 lub styczeń-grudzień | , - * / |
Dzień tygodnia | Tak | 1-7 lub NIE-SOB | , - *? / L C # |
Rok | Opcjonalny | pusty lub 1970-2099 | , - * / |
Specjalne symbole i litery używane w wyrażeniu Cron
Gwiazdka (*): Symbolu używamy, gdy chcemy wykonać zdarzenie w każdej jednostce czasu (minuta, sekunda, godzina). Na przykład, jeśli * jest użyte w minutowej jednostce czasu, oznacza to, że zdarzenie będzie wykonywane automatycznie co minutę.
Znak zapytania (?): Symbol jest używany w polach takich jak dzień miesiąca i dzień tygodnia. Oznacza dowolną wartość i ignoruje wartość pola. Załóżmy, że chcemy wykonać skrypt drugiego dnia każdego miesiąca, nie dbając o to, który dzień tygodnia przypada na drugi dzień miesiąca. W takim przypadku powinniśmy podać symbol znaku zapytania ( ?) w polu dnia tygodnia.
Łącznik (-): Symbol służy do określenia zakresu. Określa zakres wartości. Na przykład, jeśli pole godziny jest zdefiniowane jako , oznacza, że zdarzenie zostanie wykonane o 4. i 5. godzinie.
Przecinek (,): Służy do definiowania wartości pól oddzielonych przecinkiem. Na przykład piątek, sobota, niedziela itp.
Ukośnik (/): Służy do zwiększania wartości określonej jednostki czasu. Załóżmy, że chcemy rozpocząć wydarzenie o 10 minutach, potem musimy wykonać to samo zdarzenie po 20 minutach, następne wykonanie po 30 minutach i tak dalej. W tym przypadku podajemy czas rozpoczęcia i wartość przyrostową, oddzielając je ukośnikiem.
Na przykład, jeśli 10/10 w określonym w polu minuty, oznacza to, że pierwsze zdarzenie zostanie wykonane o 10 minutach, a następne wykonanie nastąpi o 20 minutach i tak nie.
L (ostatni): Użycie L ma różne znaczenie w różnych dziedzinach.
pogrubienie w css
- Jeśli był używany w pole oznacza ostatni dzień miesiąca według kalendarza.
- Jeśli został użyty z wartością przesunięcia, np L-5 . Oznacza 5tdo ostatniego dnia miesiąca kalendarzowego.
- Jeśli był używany w pole oznacza ostatni dzień tygodnia. Można go również użyć z inną wartością w polu. Na przykład, 7L oznacza Ostatnia sobota .
W: Ta ostatnia oznacza dni powszednie (od poniedziałku do piątku). Określa dzień tygodnia najbliższy określonemu dniu miesiąca.
Na przykład, jeśli określimy 5W w polu dzień miesiąca oznacza to określenie dnia tygodnia w pobliżu liczby 5tmiesiąca.
- Jeśli 5tmiesiąca jest Sobota , zdarzenie zostanie uruchomione 9t miesiąca.
- Jeśli 5tmiesiąca jest Niedziela , zdarzenie zostanie uruchomione jedenaściet miesiąca.
Może istnieć inny przypadek. Przypuszczać , 1ulmiesiąca wypada sobota, wydarzenie nastąpi 3r & Dmiesiąca. Oznacza to, że zdarzenie lub skrypt nie zostanie wykonany w poprzednim miesiącu.
Hash (#): Reprezentuje n-te wystąpienie dnia tygodnia w miesiącu. Na przykład trzeci piątek miesiąca można oznaczyć jako 6#3 .
Dlaczego powinniśmy używać wyrażeń cron?
Istnieje wiele powodów, dla których warto używać wyrażeń cron. Niektórzy z nich są:
- Możemy wygasać i usuwać pliki danych w pamięci podręcznej w określonych odstępach czasu.
- Możemy zaplanować codzienne wiadomości i e-maile.
- Możemy zaplanować uruchamianie długotrwałych zadań ze skryptu wiersza poleceń, zamiast uruchamiać je ze skryptu internetowego. Podobnie jak kodowanie filmów lub wysyłanie masowych wiadomości e-mail.
Przykład wyrażeń Cron
Zobaczmy kilka typowych wyrażeń Cron, które używają specjalnych symboli i pól.
Wyrażenie Crona | Znaczenie wyrażeń Cron |
---|---|
0 12 * * ? | Oznacza, że zadanie będzie wykonywane codziennie o godzinie 12:00 (południe). |
0/5 13,18 * * ? | Oznacza, że zadanie będzie wykonywane co pięć minut, począwszy od 13:00 a kończąc na 13:55, a następnie rozpoczynając o 18:00 i kończąc o 18:55 każdego dnia. |
0-5 13 * * ? | Oznacza, że zadanie będzie wykonywane co minutę, zaczynając od 13:00 i kończąc na 13:05 każdego dnia. |
15,45 13 ? 6 wt | Oznacza, że zadanie będzie wykonywane o 13:15 i 13:45 w każdy wtorek w czerwcu. |
30 9? * PON.-PT | Oznacza, że zadanie będzie wykonywane o 9:30 w każdy poniedziałek, wtorek, środę, czwartek i piątek. |
30 9 15 * ? | Oznacza, że zadanie zostanie wykonane o godzinie 9:30 15 dnia każdego miesiąca. |
0 18 L*? | Oznacza, że zadanie zostanie wykonane o godzinie 18:00 ostatniego dnia każdego miesiąca. |
0 18 L-3 * ? | Oznacza, że zadanie zostanie wykonane o godzinie 18:00 od trzeciego do ostatniego dnia każdego miesiąca. |
30 10? *5L | Oznacza, że zadanie będzie wykonywane o godzinie 10:30 w ostatni czwartek każdego miesiąca. |
0 10? * 23 | Oznacza, że zadanie będzie wykonywane o godzinie 10:00 w trzeci poniedziałek każdego miesiąca. |
0 0 10/5 * ? | Oznacza, że zadanie będzie wykonywane o północy każdego dnia przez pięć dni, począwszy od 10-tego dnia miesiąca. |
0 11 11 11 11 ? | Oznacza, że zadanie zostanie wykonane każdego 11 listopada o godzinie 11:11 |
0 15 10? * 6L 2002-2005 | Strzelaj o godzinie 10:15 w każdy ostatni piątek każdego miesiąca w latach 2002, 2003, 2004 i 2005. |
0 0 0? *MÓJ#1 | Oznacza, że zadanie zostanie wykonane w pierwszy poniedziałek miesiąca o północy. |
0 0 0 LW * * | Oznacza, że zadanie zostanie wykonane w ostatni dzień tygodnia miesiąca o północy. |
0 0/30 8-10 * * * | Oznacza, że zadanie będzie wykonywane codziennie o 8:00, 8:30, 9:00, 9:30, 10:00 i 10:30. |
Specjalne ustawienie w wyrażeniach Cron
Oprócz powyższego symbolu specjalnego, wyrażenie Cron obsługuje również pewne predefiniowane wartości specjalne. Wartości tych można używać zamiast pól.
Używanie wyrażeń Cron w Javie
Java udostępnia system planowania zadań typu open source, który planuje zadanie na określoną jednostkę czasu. Możemy pobrać harmonogram Quartz z oficjalnej strony.
Z punktu widzenia programowania zadanie jest klasą zawierającą zadanie do wykonania. Pytanie jednak brzmi, jak to zaplanować. Aby zaplanować zadanie, definiujemy wyzwalacz i określamy, kiedy zadanie zostanie wykonane.
Jeśli chcemy zaimplementować harmonogram Quartz, możemy dodać zależność w następujący sposób:
pokaż ukryte aplikacje
org.quartz-scheduler quartz 2.2.1
Uwaga: Przed wykonaniem poniższego programu Java upewnij się, że dodałeś kwarcowy-2.2.1.słoik plik w ścieżce, w przeciwnym razie pojawi się błąd.
Przyjrzyjmy się implementacji wyrażenia cron i zadania za pomocą programu Java.
Krok 1: Utwórz projekt Mavena. Stworzyliśmy z nazwą Przykład Crona .
Krok 2: Wewnątrz projektu utwórz dwa pakiety, a mianowicie com.javatpoint.app I com.javatpoint.job . W pierwszym pakiecie zdefiniujemy klasę główną, w drugim pakiecie zdefiniujemy zadania (w naszym przypadku liczba zadań wynosi pięć).
Krok 3: W pliku pom.xml wklej następującą zależność. Automatycznie pobiera wymagane pliki JAR dla projektu. Plik pom wygląda następująco:
4.0.0 com.javacodegeeks.snippets.enterprise quartzexample 0.0.1-SNAPSHOT org.quartz-scheduler quartz 2.2.1
Krok 4: Utwórz pięć zadań (w pakiecie com.javatpoint.job), które chcesz wykonać. W naszym przypadku zdefiniowaliśmy pięć następujących stanowisk pracy.
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()); } }
Krok 5: Utwórz klasę główną o nazwie MojaAplikacja.
MojaAplikacja.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(); } } }
Po wykonaniu wszystkich powyższych kroków katalog projektu wygląda następująco:
Generowanie liczb losowych Java
Krok 6: Uruchom powyższy program Java, aby zobaczyć wynik.
Obserwujemy, że każde zadanie jest wykonywane w określonym przedziale czasu.