logo

Java Cron İfadesi

Teknoloji her geçen gün sürekli değişiyor. Bazen sunucuda periyodik olarak bir iş yürütmemiz gerekebilir. İşin sunucuda manuel olarak çalıştırılması zor bir iştir, dolayısıyla kullanıcı veya yönetici tarafından birden fazla kez yapılamaz. Bu sorunu çözmek için, Cron programcının sunucuda belirli aralıklarla bir işi yürütmesine yardımcı olur. Otomatik sistem bakımı ve hayranlığı için yaygın olarak kullanılır. Bunun yanında şunu da kullanabiliriz Cron ifadesi web geliştirmede. Bir web uygulamasının belirli bir görevi periyodik olarak yürütmesinin gerekebileceği birçok durum vardır.

Bu bölümde şunları tartışacağız: Java Cron ifadeleri , aracılığıyla çalışıyor ve uygulanıyor Java Kuvars zamanlayıcı .

Cron nedir?

Temel olarak Cron, bir görevi zamanlayan bir yardımcı programdır. Kullanıcının belirli bir saat, tarih, ay, zayıf ve yılda bir görevi periyodik olarak zamanlamasına olanak tanır. İnsan müdahalesinin gerekli olmadığı otomatik işlemlerde yaygın olarak kullanılır.

Java Cron İfadesi

Cron İfadesi

Java'da Cron ifadeleri örneklerini yapılandırmak için kullanılır. CronTetikleyici sınıf. Bu bir alt sınıftır org.quartz.Tetikleyici sınıf. Cron ifadesi, altı veya yedi alandan (zaman birimi) oluşan bir dize veya ifadedir. Programın ve komutun bireysel ayrıntılarını açıklar.

 

Bir cron ifadesi basit olabileceği gibi karmaşık da olabilir. Örneğin,

Basit: * * * * ? * (yıldız işareti alanları belirtir)

Kompleks: 0 0/4 12,15,3-35,52 ? Mayıs,Haziran,Temmuz SALI-CUMARTESİ 2002-2010.

Ayrıca bir Cron ifadesinin aşağıdaki gibi farklı stillerde yazılabileceğini unutmayın. Örneğin aşağıdaki üç Cron ifadesi aynı anlama sahiptir.

genel ve özel java
  • 0 10 9 ? * *
  • 0 10 9 * * ?
  • 0 10 9 * * ? *

Her üç ifade de her gün sabah 9:10'da yürütülür.

Cron İfadesinde Kullanılan Alanlar

Cron ifadelerinde zaman birimi şu şekilde bilinir: alan . Bunlar beyaz boşlukla ayrılır ve o alan için izin verilen karakterlerin çeşitli kombinasyonlarıyla izin verilen değerlerden herhangi birini içerebilir. Alanları beklenen sırayla gösterir. Aşağıdaki tabloda zaman birimi, karşılık gelen değerler ve ifadelerle kullanılabilecek simgeler gösterilmektedir.

Alan adı Gerekli İzin Verilen Değerler Alanlarla İzin Verilen Özel Karakterler ve Semboller
Saniye Evet 0-59 , - * /
dakika Evet 0-59 , - * /
Saat Evet 0-23 , - * /
Ayın günü Evet -31 , - * ? / LWC
Ay Evet 0-11 veya OCAK-ARALIK , - * /
Haftanın günü Evet 1-7 veya PAZ-CUMARTESİ , - * ? / L C#
Yıl İsteğe bağlı boş veya 1970-2099 , - * /

Cron İfadesinde Kullanılan Özel Sembol ve Harfler

Yıldız işareti (*): Olayı her zaman biriminde (dakika, saniye, saat) yürütmek istediğimizde sembolü kullanılır. Örneğin, dakika zaman birimiyle birlikte * kullanılırsa bu, bir olayın her dakikada bir otomatik olarak yürütüleceği anlamına gelir.

hızlı sıralama algoritması

Soru işareti (?): Sembol ayın günü, haftanın günü gibi alanlarda kullanılır. İsteğe bağlı değeri belirtir ve alanların değerini yok sayar. Diyelim ki, haftanın hangi gününün ayın 2'sine denk geldiğini umursamadan her ayın 2'sinde bir script çalıştırmak istiyoruz. Bu durumda soru işareti sembolünü belirtmeliyiz ( ?) haftanın günü alanında.

Kısa çizgi (-): Sembol aralığı belirtmek için kullanılır. Değer aralığını belirler. Örneğin, bir saat alanı şu şekilde tanımlanmışsa: , bir etkinliğin 4. ve 5. saatte yürütüleceği anlamına gelir.

Virgül (,): Virgülle ayrılmış alanların değerlerini tanımlamak için kullanılır. Örneğin Cuma, Cumartesi, Pazar vb.

İleri Eğik Çizgi (/): Belirtilen zaman biriminin değerlerini artırmak için kullanılır. Diyelim ki, bir olayı 10 dakikada başlatmak istiyoruz, ardından aynı olayı 20 dakikada, bir sonraki yürütmeyi 30 dakikada vb. yürütmemiz gerekiyor. Bu durumda, başlangıç ​​zamanını ve artış değerini eğik çizgiyle ayırarak belirtiriz.

Örneğin, eğer 10/10 dakika alanında belirtildiğinde, ilk olayın 10 dakikada yürütüleceği ve bir sonraki yürütmenin saatin 20 dakikasında olacağı anlamına gelir, yani hayır.

L (Son): L'nin kullanımı çeşitli alanlarda farklı anlamlara sahiptir.

  • Eğer kullanılmışsa alanı takvime göre ayın son gününü belirtir.
  • Gibi bir ofset değeriyle kullanılmışsa L-5 . 5'i ifade ederotakvim ayının son gününe kadar.
  • Eğer kullanılmışsa alanı haftanın son gününü belirtir. Alandaki diğer değerlerle de kullanılabilir. Örneğin, 7L şunu belirtir geçen cumartesi .

İÇİNDE: Daha sonra hafta içi günleri (Pazartesiden Cumaya) temsil eder. Ayın belirtilen gününe en yakın haftanın gününü belirler.

Java'da statik işlev

Örneğin, belirtirsek 5W Ayın günü alanında, 5'e yakın haftanın gününü belirlemek anlamına geliroayın.

  • 5 iseoayın Cumartesi tarihinde bir etkinlik tetiklenecek 9o ayın.
  • 5 iseoayın Pazar tarihinde bir etkinlik tetiklenecek on biro ayın.

Başka bir durum söz konusu olabilir. Sanmak , 1stayın Cumartesi günü, 3'ünde bir etkinlik gerçekleşeceküçüncüayın. Bu, önceki ayda etkinliğin veya komut dosyasının yürütülmeyeceği anlamına gelir.

Doğramak (#): Ayın hafta içi bir gününün n'inci oluşumunu temsil eder. Örneğin ayın üçüncü Cuma günü şu şekilde belirtilebilir: 6#3 .

Neden cron ifadelerini kullanmalıyız?

Cron ifadelerini kullanmanın çeşitli nedenleri vardır. Onlardan bazıları:

  • Önbelleğe alınmış veri dosyalarının süresini belirli aralıklarla silebiliriz.
  • Günlük haber mektubu ve e-postaları planlayabiliriz.
  • Uzun süren görevleri bir web betiğinden çalıştırmak yerine bir komut satırı betiğinden çalıştırılacak şekilde zamanlayabiliriz. Videoları kodlamak veya toplu e-posta göndermek gibi.

Cron İfadeleri Örneği

Özel sembol ve alanlar kullanan bazı yaygın Cron ifadelerini görelim.

Cron İfadesi Cron İfadelerinin Anlamı
0 12 * * ? Bir işin her gün saat 12:00'de (öğlen) yürütüleceğini belirtir.
0/5 13,18 * * ? Bu, bir işin her gün saat 13.00'te başlayıp 13.55'te bitip 18.00'de başlayıp 18.55'te bitecek şekilde her beş dakikada bir yürütüleceğini belirtir.
0-5 13 * * ? Bir işin her gün saat 13:00'ten başlayıp 13:05'e kadar her dakika yürütüleceğini belirtir.
15,45 13 ? 6 Sal Bu, bir işin Haziran ayında her Salı günü saat 13:15 ve 13:45'te yürütüleceğini belirtir.
30 9? * Pzt-Cuma Bir işin her Pazartesi, Salı, Çarşamba, Perşembe ve Cuma sabah 9:30'da yürütüleceğini belirtir.
30 9 15 * ? Bir işin her ayın 15'inde sabah 9:30'da yürütüleceğini belirtir.
0 18 L* ? Bir işin her ayın son günü saat 18.00'de yürütüleceğini belirtir.
0 18 L-3 * ? Bir işin her ayın üçüncü gününden son gününe kadar saat 18.00'de yürütüleceğini belirtir.
30 10 mu? *5L Bir işin her ayın son Perşembe günü saat 10:30'da yürütüleceğini belirtir.
0 10? * 23 Bir işin her ayın üçüncü Pazartesi günü saat 10:00'da yürütüleceğini belirtir.
0 0 10/5 * ? Bir işin ayın 10'undan itibaren beş gün boyunca her gün gece yarısı 12'de gerçekleştirileceğini ifade eder.
0 11 11 11 11 ? Bir işin her 11 Kasım'da saat 11:11'de yürütüleceğini belirtir.
0 15 10 ? * 6L 2002-2005 2002, 2003, 2004 ve 2005 yılları boyunca her ayın son Cuma günü saat 10:15'te ateşleyin.
0 0 0 ? * BENİM #1'im Bir işin ayın ilk Pazartesi günü gece yarısı yürütüleceğini belirtir.
0 0 0 LW* * Bir işin ayın son haftası gece yarısı yürütüleceğini belirtir.
0 0/30 8-10 * * * Bir işin her gün saat 8:00, 8:30, 9:00, 9:30, 10:00 ve 10:30'da yürütüleceğini belirtir.

Cron İfadelerinde Özel Ayar

Yukarıdaki özel sembolün yanı sıra Cron ifadesi ayrıca önceden tanımlanmış bazı özel değerleri de destekler. Bu değerler alanların yerine kullanılabilir.

    @yıllık veya @yıllık:Yılda bir kez bir iş yürütür. Örneğin, '0 0 0 1 1 *' .@aylık: Ayda bir iş çalıştırır. Örneğin, '0 0 0 1 * *'. @haftalık: Haftada bir kez iş çalıştırır. Örneğin, '0 0 0 * * 0'. @günlük veya @gece yarısı:Günde bir kez iş çalıştırır. Örneğin, '0 0 0 * * *'. @saatlik: İşi saatlik olarak çalıştırır. Örneğin, '0 0 * * * *'.

Java'da Cron İfadesini Kullanmak

Java, bir işi belirli bir zaman birimi için planlayan açık kaynaklı bir iş planlama sistemi sağlar. Quartz zamanlayıcıyı resmi siteden indirebiliriz.

özel ve genel java

Programlama açısından iş, yürütülecek görevi içeren bir sınıftır. Ancak sorun bunun nasıl planlanacağıdır. Bir işi planlamak için bir tetikleyici tanımlarız ve işin ne zaman yürütüleceğini belirtiriz.

Quartz zamanlayıcıyı uygulamak istiyorsak bağımlılığı aşağıdaki gibi ekleyebiliriz:

 org.quartz-scheduler quartz 2.2.1 

Not: Aşağıdaki Java programını çalıştırmadan önce eklediğinizden emin olun. kuvars-2.2.1.jar dosya yolunda, aksi halde hata alırsınız.

Bir Java programı aracılığıyla cron ifadesinin ve işinin uygulanmasını görelim.

Aşama 1: Bir Maven projesi oluşturun. ismiyle yarattık CronÖrneği .

Adım 2: Projenin içinde iki paket oluşturun; com.javatpoint.app Ve com.javatpoint.job . İlk pakette ana sınıfı tanımlayacağız ve ikinci pakette işleri tanımlayacağız (bizim durumumuzda iş sayısı beştir).

Aşama 3: Pom.xml dosyasına aşağıdaki bağımlılığı yapıştırın. Proje için gerekli JAR dosyalarını otomatik olarak indirir. Pom dosyası aşağıdakine benzer:

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

Adım 4: Yürütmek istediğiniz beş işi (com.javatpoint.job paketinde) oluşturun. Bizim durumumuzda aşağıdaki beş işi tanımladık.

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()); } } 

Adım 5: MyApp adıyla ana sınıfı oluşturun.

Uygulamam.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(); } } } 

Yukarıdaki tüm adımları tamamladığımızda proje dizini aşağıdaki gibi görünecektir:

java kullanım tarihi
Java Cron İfadesi

Adım 6: Çıktıyı görmek için yukarıdaki Java programını çalıştırın.

Java Cron İfadesi

Her işin belirli zaman aralıklarında yürütüldüğünü gözlemliyoruz.