Технологія постійно змінюється день у день. Іноді нам потрібно періодично виконувати завдання на сервері. Запуск завдання на сервері вручну є складним завданням, тому користувач або адміністратор не може виконати це кілька разів. Щоб вирішити цю проблему, Cron допомагає програмісту періодично виконувати завдання на сервері. Широко використовується для автоматизованих систем обслуговування та милування. Окрім цього, ми також можемо використовувати Вираз Cron у веб-розробці. Існує багато ситуацій, коли веб-програмі може знадобитися періодично виконувати певне завдання.
У цьому розділі ми обговоримо Вирази Java Cron , це працює та впроваджується Планувальник Java Quartz .
Що таке Cron?
По суті, Cron — це утиліта, яка планує завдання. Це дозволяє користувачеві періодично планувати завдання на визначений час, число, місяць, слабкий рік і рік. Він широко використовується в автоматизованих процесах, де не потрібно втручання людини.
що таке інтернет
Вираз Cron
У Java вирази Cron використовуються для налаштування екземплярів CronTrigger клас. Це підклас org.quartz.Trigger клас. Вираз Cron — це рядок або вираз, що складається з шести або семи полів (одиниці часу). Він описує окремі деталі розкладу та команди.
Вираз cron може бути простим і складним. Наприклад,
Простий: * * * * ? * (зірочкою позначені поля)
Комплекс: 0 0/4 12,15,3-35,52 ? Травень, червень, липень ВТ-СУБ 2002-2010.
Також зауважте, що вираз Cron можна записати в різних стилях, як показано нижче. Наприклад, наступні три вирази Cron мають однакове значення.
- 0 10 9 ? * *
- 0 10 9 * * ?
- 0 10 9 * * ? *
Усі три вирази виконуйте щодня о 9:10.
Поля, що використовуються у виразі Cron
У виразах Cron одиниця часу відома як поле . Вони розділені пробілом і можуть містити будь-які дозволені значення з різними комбінаціями дозволених символів для цього поля. Він показує поля в очікуваному порядку. У наведеній нижче таблиці зображено одиниці часу та відповідні значення, а також символи, які можна використовувати з виразами.
Назва поля | вимагається | Дозволені значення | Дозволені спеціальні символи та символи з полями |
---|---|---|---|
секунд | Так | 0-59 | , - * / |
хвилин | Так | 0-59 | , - * / |
години | Так | 0-23 | , - * / |
День місяця | Так | -31 | , - * ? / L W C |
місяць | Так | 0-11 або СІЧ-ГРУД | , - * / |
День тижня | Так | 1-7 або НД-СУБ | , - * ? / L C # |
рік | Додатково | порожній або 1970-2099 рр | , - * / |
Спеціальні символи та літери, що використовуються у виразі Cron
Зірочка (*): Символ використовується, коли ми хочемо виконати подію в кожній одиниці часу (хвилина, секунда, година). Наприклад, якщо * використовується з одиницею вимірювання часу хвилини, це означає, що подія виконуватиметься щохвилини автоматично.
foreach java
Знак питання (?): Символ використовується в таких полях, як день місяця та день тижня. Він позначає довільне значення та ігнорує значення полів. Припустімо, ми хочемо виконувати сценарій 2-го числа кожного місяця, не звертаючи уваги на те, який день тижня припадає на 2-й день місяця. У цьому випадку потрібно вказати знак питання ( ?) у полі дня тижня.
Дефіс (-): Символ використовується для визначення діапазону. Він визначає діапазон значень. Наприклад, якщо поле години визначено як , означає, що подія буде виконано о 4-й і 5-й годині.
Кома (,): Використовується для визначення значень полів, розділених комою. Наприклад, пт, сб, нд тощо.
Слеш (/): Він використовується для збільшення значень заданої одиниці часу. Припустімо, ми хочемо розпочати подію на 10-й хвилині, після цього нам потрібно виконати ту саму подію на 20-й хвилині, наступне виконання на 30-й хвилині і так далі. У цьому випадку ми вказуємо час початку та інкрементне значення, розділені косою рискою.
Наприклад, якщо 10/10 у зазначеному в полі хвилин, це означає, що перша подія виконується через 10 хвилин, а наступне виконання відбудеться через 20 хвилин години, тому ні.
L (останній): Використання L має різне значення для різних полів.
- Якщо він використовувався в поле, воно позначає останній день місяця за календарем.
- Якщо він використовувався зі значенням зміщення, наприклад L-5 . Це позначає 5тисдо останнього дня календарного місяця.
- Якщо він використовувався в поле, воно позначає останній день тижня. Його також можна використовувати з іншим значенням у полі. Наприклад, 7л позначає минула субота .
В: Пізніше означає робочі дні (з понеділка по п’ятницю). Він визначає день тижня, найближчий до зазначеного дня місяця.
Наприклад, якщо ми вкажемо 5 Вт у полі дня місяця це означає, що w визначає день тижня поруч із 5тисмісяця.
- Якщо 5тисмісяця є Субота , запуститься подія 9тис місяця.
- Якщо 5тисмісяця є неділя , запуститься подія одинадцятьтис місяця.
Може бути інший випадок. Припустимо , 1вулмісяця субота, подія відбудеться 3rdмісяця. Це означає, що подія або сценарій не буде виконано в попередньому місяці.
Хеш (#): Це n-е повторення дня тижня місяця. Наприклад, можна вказати третю п'ятницю місяця 6#3 .
перетворення рядка в ціле число в java
Чому ми повинні використовувати вирази cron?
Існують різні причини для використання виразів cron. Деякі з них:
- Ми можемо закінчувати термін дії та стерти кешовані файли даних через певний проміжок часу.
- Ми можемо запланувати щоденні новини та електронні листи.
- Ми можемо запланувати виконання довгострокових завдань зі сценарію командного рядка, а не за допомогою веб-сценарію. Як-от кодування відео чи масова розсилка електронних листів.
Приклад виразів Cron
Давайте розглянемо деякі поширені вирази Cron, які використовують спеціальні символи та поля.
Вираз Cron | Значення виразів Cron |
---|---|
0 12 * * ? | Це означає, що завдання виконуватиметься щодня о 12:00 (опівдні). |
0/5 13,18 * * ? | Це означає, що завдання виконуватиметься кожні п’ять хвилин, починаючи з 13:00 і закінчуючи о 13:55, а потім починаючи з 18:00 і закінчуючи о 18:55 щодня. |
0-5 13 * * ? | Це означає, що завдання виконуватиметься щохвилини, починаючи з 13:00 і закінчуючи о 13:05 щодня. |
15,45 13 ? 6 вт | Це означає, що завдання виконуватиметься о 13:15 та 13:45 щовівторка в червні. |
30 9? * ПН-ПТ | Це означає, що завдання виконуватиметься о 9:30 щопонеділка, вівторка, середи, четверга та п’ятниці. |
30 9 15 * ? | Це означає, що завдання буде виконано о 9:30 ранку 15 числа кожного місяця. |
0 18 л * ? | Це означає, що завдання буде виконано о 18:00 в останній день кожного місяця. |
0 18 L-3 * ? | Це означає, що завдання буде виконано о 18:00 третього передостаннього дня кожного місяця. |
30 10 ? *5 л | Це означає, що завдання буде виконано о 10:30 ранку в останній четвер кожного місяця. |
0 10 ? * 23 | Це означає, що завдання буде виконано о 10:00 третього понеділка кожного місяця. |
0 0 10/5 * ? | Це означає, що завдання виконуватиметься о 12 годині ночі щодня протягом п’яти днів, починаючи з 10 числа місяця. |
0 11 11 11 11 ? | Це означає, що завдання виконуватиметься кожного 11 листопада об 11:11 |
0 15 10 ? * 6L 2002-2005 | Вогонь о 10:15 кожної останньої п'ятниці кожного місяця протягом 2002, 2003, 2004 та 2005 років. |
0 0 0 ? * МІЙ №1 | Це означає, що завдання буде виконано в перший понеділок місяця опівночі. |
0 0 0 LW * * | Це означає, що завдання буде виконано в останній день тижня місяця опівночі. |
0 0/30 8-10 * * * | Це означає, що завдання виконуватиметься щодня о 8:00, 8:30, 9:00, 9:30, 10:00 та 10:30. |
Спеціальне налаштування у виразах Cron
Крім зазначеного вище спеціального символу, вираз Cron також підтримує деякі попередньо визначені спеціальні значення. Ці значення можна використовувати замість полів.
Використання виразу Cron у Java
Java надає систему планування завдань з відкритим вихідним кодом, яка планує завдання на певну одиницю часу. Завантажити планувальник Quartz можна з офіційного сайту.
З точки зору програмування, завдання - це клас, який містить завдання, яке потрібно виконати. Але питання в тому, як це спланувати. Для планування завдання ми визначаємо тригер і вказуємо час виконання завдання.
матриця мовою c
Якщо ми хочемо реалізувати планувальник Quartz, ми можемо додати залежність наступним чином:
org.quartz-scheduler quartz 2.2.1
Примітка. Перш ніж запускати наступну програму Java, переконайтеся, що ви додали кварц-2.2.1.бан файл у шляху, інакше ви отримаєте помилку.
Давайте подивимося реалізацію виразу cron і завдання через програму Java.
Крок 1: Створіть проект Maven. Ми створили з назвою CronExample .
крок 2: Усередині проекту створіть два пакети, а саме com.javatpoint.app і com.javatpoint.job . У першому пакеті ми визначимо основний клас, а в другому пакеті ми визначимо завдання (у нашому випадку кількість завдань дорівнює п’яти).
крок 3: У файл pom.xml вставте таку залежність. Він автоматично завантажує необхідні файли JAR для проекту. Файл pom виглядає так:
4.0.0 com.javacodegeeks.snippets.enterprise quartzexample 0.0.1-SNAPSHOT org.quartz-scheduler quartz 2.2.1
крок 4: Створіть п’ять завдань (у пакеті com.javatpoint.job), які ви хочете виконати. У нашому випадку ми визначили наступні п’ять робочих місць.
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()); } }
крок 5: Створіть головний клас з назвою MyApp.
MyApp.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(); } } }
Коли ми виконали всі описані вище кроки, каталог проекту виглядає так:
java упс поняття
Крок 6: Запустіть наведену вище програму Java, щоб побачити результат.
Ми спостерігаємо, що кожна робота виконується через певний проміжок часу.