logo

Java Cron израз

Технологията непрекъснато се променя всеки ден. Понякога от нас се изисква периодично да изпълняваме задача на сървъра. Ръчното изпълнение на заданието на сървъра е трудна задача, така че не може да се извърши многократно от потребителя или администратора. За да разрешите този проблем, Cron помага на програмиста да изпълнява периодично задание на сървъра. Той се използва широко за автоматизирана поддръжка на системи и възхищение. Освен това можем да използваме и Cron израз в уеб разработката. Има много ситуации, когато уеб приложение може да се наложи периодично да изпълнява определена задача.

В този раздел ще обсъдим Java Cron изрази , той работи и се внедрява чрез Java Quartz планировчик .

Какво е Cron?

По принцип Cron е помощна програма, която планира задача. Позволява на потребителя да планира задача периодично в определено време, дата, месец, слаба и година. Той се използва широко в автоматизирани процеси, където не се изисква човешка намеса.

Java 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 Express

В изразите на Cron единицата за време е известна като поле . Те са разделени с бяло пространство и могат да съдържат всяка от разрешените стойности с различни комбинации от разрешените знаци за това поле. Той показва полетата в очаквания ред. Следната таблица изобразява единицата за време и съответните стойности и символи, които могат да се използват с изразите.

Име на полето Задължително Позволени стойности Позволени специални знаци и символи с полета
Секунди да 0-59 , - * /
Минути да 0-59 , - * /
Часа да 0-23 , - * /
Ден от месеца да -31 , - * ? / L W C
месец да 0-11 или ЯН-ДЕК , - * /
Ден на седмицата да 1-7 или СЛЪНЦЕ-СЪБ , - * ? / L C #
година Не е задължително празен или 1970-2099г , - * /

Специални символи и букви, използвани в Cron Express

Звездичка (*): Символът се използва, когато искаме да изпълним събитие във всяка времева единица (минута, секунда, час). Например, ако * се използва с минутна времева единица, това означава, че събитие ще се изпълнява на всяка минута автоматично.

java дължина на масива

Въпросителен знак (?): Символът се използва в полета като ден от месеца и ден от седмицата. Той обозначава произволната стойност и игнорира стойността на полетата. Да предположим, че искаме да изпълним скрипт на 2-ро число на всеки месец, без да ни интересува кой ден от седмицата попада във 2-ри ден от месеца. В този случай трябва да посочим символ на въпросителен знак ( ?) в полето ден от седмицата.

Тире (-): Символът се използва за указване на диапазона. Той определя обхвата на стойностите. Например, ако поле за час е дефинирано като , означава, че дадено събитие ще се изпълни на 4-ия и 5-ия час.

Запетая (,): Използва се за дефиниране на стойности на полетата, разделени със запетая. Например петък, събота, неделя и т.н.

Наклонена черта (/): Използва се за увеличаване на стойностите на определената времева единица. Да предположим, че искаме да започнем събитие на 10 минути, след което трябва да изпълним същото събитие на 20 минути, следващо изпълнение на 30 минути и т.н. В този случай ние посочваме началния час и нарастващата стойност, разделени с наклонена черта.

Например ако 10/10 в посочено в полето за минути, това означава, че първото събитие ще се изпълни на 10 минути, а следващото изпълнение ще бъде на 20 минути от час, и така не.

L (последен): Използването на L има различно значение с различни полета.

едит мак хърш
  • Ако е бил използван в поле, то обозначава последния ден от месеца, според календара.
  • Ако е бил използван със стойност на отместване като L-5 . Означава 5thдо последния ден на календарния месец.
  • Ако е бил използван в поле, то обозначава последния ден от седмицата. Може да се използва и с друга стойност в полето. Например, обозначава миналата събота .

В: По-късното представлява делничните дни (от понеделник до петък). Той определя деня от седмицата, който е най-близо до посочения ден от месеца.

Например, ако посочим 5W в полето ден от месеца това означава, че w определя деня от седмицата близо до 5thна месеца.

  • Ако 5thна месеца е Събота , събитие ще се задейства на 9th на месеца.
  • Ако 5thна месеца е неделя , събитие ще се задейства на единадесетth на месеца.

Може да има и друг случай. Да предположим , 1улот месеца е събота, събитие ще се случи на 3rdна месеца. Това означава, че събитието или скриптът няма да се изпълни през предходния месец.

Хеш (#): Представлява n-тата поява на делничен ден от месеца. Например третият петък от месеца може да бъде посочен като 6#3 .

Защо трябва да използваме 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:05 ч. и завършвайки в 13:05 ч., всеки ден.
15,45 13 ? 6 вт Това означава, че дадена задача ще се изпълнява в 13:15 и 13:45 всеки вторник през месец юни.
30 9? * ПОН-ПЕТ Това означава, че дадена задача ще се изпълнява в 9:30 сутринта всеки понеделник, вторник, сряда, четвъртък и петък.
30 9 15 * ? Това означава, че дадена задача ще се изпълнява в 9:30 сутринта на 15-ия ден от всеки месец.
0 18 L * ? Означава, че дадена задача ще се изпълнява в 18 часа в последния ден от всеки месец.
0 18 L-3 * ? Това означава, че дадена задача ще се изпълнява в 18 часа на третия до последния ден на всеки месец.
30 10 ? *5л Това означава, че дадена задача ще се изпълнява в 10:30 сутринта в последния четвъртък на всеки месец.
0 10 ? * 23 Това означава, че дадена задача ще се изпълнява в 10 сутринта на третия понеделник на всеки месец.
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 изразът поддържа и някои предварително дефинирани специални стойности. Тези стойности могат да се използват вместо полетата.

    @годишно или @годишно:Работи веднъж годишно. Например, '0 0 0 1 1 *' .@месечно: Работи веднъж месечно. Например, „0 0 0 1 * *“. @седмично: Работи веднъж седмично. Например, '0 0 0 * * 0'. @ежедневно или @полунощ:Работи веднъж на ден. Например, „0 0 0 * * *“. @почасово: Работи на час. Например, '0 0 * * * *'.

Използване на Cron Expression в Java

Java предоставя система за планиране на задачи с отворен код, която планира работа за определена единица време. Можем да изтеглим Quartz Scheduler от официалния сайт.

От гледна точка на програмирането, заданието е клас, който съдържа задачата, която трябва да бъде изпълнена. Но въпросът е как да го планираме. За планиране на задание ние дефинираме тригер и посочваме кога заданието ще се изпълни.

Ако искаме да внедрим Quartz Scheduler, можем да добавим зависимостта, както следва:

 org.quartz-scheduler quartz 2.2.1 

Забележка: Преди да изпълните следната Java програма, уверете се, че сте добавили кварц-2.2.1.буркан файл в пътя, в противен случай ще получите грешка.

Нека видим изпълнението на cron израз и задание чрез Java програма.

Етап 1: Създайте проект на Maven. Създадохме с името CronExample .

Стъпка 2: Вътре в проекта създайте а именно два пакета com.javatpoint.app и com.javatpoint.job . В първия пакет ще дефинираме основния клас, а във втория пакет ще дефинираме заданията (в нашия случай броят на заданията е пет).

k-nn алгоритъм

Стъпка 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
Java Cron израз

Стъпка 6: Стартирайте горната Java програма, за да видите резултата.

Java Cron израз

Наблюдаваме, че всяка задача се изпълнява на определен интервал от време.