logo

تعبير جافا كرون

التكنولوجيا تتغير باستمرار يوما بعد يوم. في بعض الأحيان، يُطلب منا تنفيذ مهمة بشكل دوري على الخادم. يعد تشغيل المهمة على الخادم يدويًا مهمة صعبة، لذا لا يمكن للمستخدم أو المسؤول القيام بها عدة مرات. ومن أجل حل هذه المشكلة، كرون يساعد المبرمج على تنفيذ مهمة بشكل دوري على الخادم. يستخدم على نطاق واسع لصيانة النظام الآلي والإعجاب. بجانب هذا، يمكننا أيضًا استخدام تعبير كرون في تطوير الويب. هناك العديد من المواقف التي قد يحتاج فيها تطبيق الويب إلى تنفيذ مهمة معينة بشكل دوري.

في هذا القسم سنناقش تعبيرات جافا كرون ، يتم العمل والتنفيذ من خلاله جافا كوارتز جدولة .

أوامر لينكس التي

ما هو كرون؟

في الأساس، Cron هي أداة مساعدة تقوم بجدولة مهمة. يسمح للمستخدم بجدولة مهمة بشكل دوري في الوقت والتاريخ والشهر والضعيف والسنة المحددة. ويستخدم على نطاق واسع في العمليات الآلية حيث لا يتطلب التدخل البشري.

تعبير جافا كرون

تعبير كرون

في Java، تُستخدم تعبيرات Cron لتكوين مثيلات ملف كرون تريجر فصل. إنها فئة فرعية من 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 صباحًا كل يوم.

الحقول المستخدمة في تعبير كرون

في تعبيرات كرون، تُعرف وحدة الوقت باسم مجال . يتم فصلها بمسافة بيضاء، ويمكن أن تحتوي على أي من القيم المسموح بها مع مجموعات مختلفة من الأحرف المسموح بها لهذا الحقل. ويعرض الحقول بالترتيب المتوقع. يوضح الجدول التالي وحدة الوقت والقيم المقابلة لها والرموز التي يمكن استخدامها مع التعبيرات.

اسم الحقل مطلوب القيم المسموح بها الأحرف والرموز الخاصة المسموح بها مع الحقول
ثواني نعم 0-59 , - * /
دقائق نعم 0-59 , - * /
ساعات نعم 0-23 , - * /
يوم من الشهر نعم -31 - * ؟ / ل ث ج
شهر نعم 0-11 أو يناير-ديسمبر , - * /
يوم من الأسبوع نعم 1-7 أو أحد-سات - * ؟ / خطاب الاعتماد #
سنة خياري فارغة أو 1970-2099 , - * /

الرموز والحروف الخاصة المستخدمة في تعبير Cron

النجمة (*): يتم استخدام الرمز عندما نريد تنفيذ حدث في كل وحدة زمنية (دقيقة، ثانية، ساعة). على سبيل المثال، إذا تم استخدام * مع وحدة الوقت بالدقيقة، فهذا يعني أنه سيتم تنفيذ حدث في كل دقيقة تلقائيًا.

علامة استفهام (؟): يتم استخدام الرمز في الحقول مثل يوم من الشهر ويوم من الأسبوع. يشير إلى القيمة التعسفية ويتجاهل قيمة الحقول. لنفترض أننا نريد تنفيذ البرنامج النصي في اليوم الثاني من كل شهر دون الاهتمام بأي يوم من أيام الأسبوع يقع في اليوم الثاني من الشهر. وفي هذه الحالة يجب أن نحدد رمز علامة الاستفهام ( ؟) في مجال يوم الأسبوع.

واصلة (-): يتم استخدام الرمز لتحديد النطاق. ويحدد نطاق القيم. على سبيل المثال، إذا تم تعريف حقل الساعة كـ , يعني أن الحدث سيتم تنفيذه في الساعة الرابعة والخامسة.

الفاصلة (،): يتم استخدامه لتحديد قيم الحقول المفصولة بفاصلة. على سبيل المثال، الجمعة، السبت، الأحد، إلخ.

مائل (/): يتم استخدامه لزيادة قيم وحدة الوقت المحددة. لنفترض أننا نريد أن نبدأ حدثًا في 10 دقائق، وبعد ذلك يتعين علينا تنفيذ نفس الحدث في 20 دقيقة، والتنفيذ التالي في 30 دقيقة، وهكذا. في هذه الحالة، نحدد وقت البدء والقيمة المتزايدة، مفصولة بشرطة مائلة للأمام.

على سبيل المثال، إذا 10/10 في المحدد في حقل الدقيقة، فهذا يعني أن الحدث الأول سيتم تنفيذه في 10 دقائق، وسيكون التنفيذ التالي في 20 دقيقة من الساعة، وبالتالي لا.

ل (الأخير): استخدام L له معنى مختلف مع مختلف المجالات.

  • إذا تم استخدامه في الحقل، فهو يشير إلى اليوم الأخير من الشهر، وفقًا للتقويم.
  • إذا تم استخدامه مع قيمة إزاحة مثل إل-5 . ويرمز إلى 5ذإلى آخر يوم من الشهر التقويمي.
  • إذا تم استخدامه في الحقل، فهو يشير إلى اليوم الأخير من الأسبوع. ويمكن استخدامه أيضًا مع قيمة أخرى في هذا المجال. على سبيل المثال، 7L يدل على السبت الماضي .

في: يمثل الأخير أيام الأسبوع (من الاثنين إلى الجمعة). فهو يحدد يوم الأسبوع الأقرب إلى اليوم المحدد من الشهر.

على سبيل المثال، إذا حددنا 5 واط في حقل يوم الشهر، فهذا يعني تحديد يوم الأسبوع بالقرب من الرقم 5ذمن الشهر.

  • إذا كان 5ذالشهر هو السبت ، سيتم تشغيل حدث ما 9ذ من الشهر.
  • إذا كان 5ذالشهر هو الأحد ، سيتم تشغيل حدث ما أحد عشرذ من الشهر.

قد تكون هناك حالة أخرى. يفترض ، 1شارعالشهر هو يوم السبت، سيحدث حدث في 3بحث وتطويرمن الشهر. وهذا يعني أن الحدث أو البرنامج النصي لن يتم تنفيذه في الشهر السابق.

التجزئة (#): وهو يمثل حدوث n-th من أيام الأسبوع من الشهر. على سبيل المثال، يمكن الإشارة إلى الجمعة الثالثة من الشهر على أنها 6#3 .

لماذا يجب علينا استخدام تعبيرات كرون؟

هناك أسباب مختلفة لاستخدام تعبيرات cron. بعض منهم:

  • يمكننا انتهاء صلاحية ملفات البيانات المخزنة مؤقتًا ومسحها في فترة زمنية معينة.
  • يمكننا جدولة الرسائل الإخبارية اليومية ورسائل البريد الإلكتروني.
  • يمكننا جدولة المهام طويلة الأمد ليتم تشغيلها من برنامج نصي لسطر الأوامر، بدلاً من تشغيلها من برنامج نصي على الويب. مثل تشفير مقاطع الفيديو، أو إرسال رسائل بريد إلكتروني مجمعة.

مثال على تعبيرات كرون

دعونا نرى بعض تعبيرات Cron الشائعة التي تستخدم رموزًا وحقولًا خاصة.

تعبير كرون معنى تعبيرات كرون
0 12 * * ؟ يشير إلى أنه سيتم تنفيذ المهمة عند الساعة 12:00 ظهرًا (ظهرًا) كل يوم.
0/5 13.18 * * ؟ يشير إلى أنه سيتم تنفيذ المهمة كل خمس دقائق بدءًا من الساعة 1 مساءً وتنتهي عند الساعة 1:55 مساءً ثم تبدأ عند الساعة 6 مساءً وتنتهي عند الساعة 6:55 مساءً، كل يوم.
0-5 13 * * ؟ يشير إلى أنه سيتم تنفيذ المهمة في كل دقيقة بدءًا من الساعة 1 ظهرًا وتنتهي الساعة 1:05 مساءً كل يوم.
15,45 13 ؟ 6 الثلاثاء ويشير إلى أنه سيتم تنفيذ المهمة في الساعة 1:15 مساءً و1:45 مساءً كل يوم ثلاثاء في شهر يونيو.
30 9؟ * من الإثنين إلى الجمعة يشير إلى أنه سيتم تنفيذ المهمة في الساعة 9:30 صباحًا كل يوم اثنين وثلاثاء وأربعاء وخميس وجمعة.
30 9 15 * ؟ ويشير إلى أنه سيتم تنفيذ المهمة في الساعة 9:30 صباحًا في اليوم الخامس عشر من كل شهر.
0 18 لتر * ؟ ويشير إلى أنه سيتم تنفيذ المهمة في الساعة 6 مساءً في اليوم الأخير من كل شهر.
0 18 ل-3 * ؟ ويشير إلى أنه سيتم تنفيذ المهمة في الساعة 6 مساءً في اليوم الثالث إلى الأخير من كل شهر.
30 10 ? * 5L ويشير إلى أنه سيتم تنفيذ المهمة في الساعة 10:30 صباحًا في يوم الخميس الأخير من كل شهر.
0 10 ؟ * 23 ويشير إلى أنه سيتم تنفيذ المهمة في الساعة 10 صباحًا في يوم الاثنين الثالث من كل شهر.
0 0 10/5 * ؟ ويشير إلى أنه سيتم تنفيذ المهمة عند الساعة 12 منتصف الليل كل يوم لمدة خمسة أيام بدءًا من اليوم العاشر من الشهر.
0 11 11 11 11 ؟ يشير إلى أنه سيتم تنفيذ المهمة في 11 نوفمبر من كل عام الساعة 11:11 صباحًا
0 15 10 ؟ * 6 لتر 2002-2005 إطلاق النار الساعة 10:15 صباحًا في كل يوم جمعة أخير من كل شهر خلال الأعوام 2002 و2003 و2004 و2005.
0 0 0 ؟ * بلدي # 1 ويشير إلى أنه سيتم تنفيذ المهمة في أول يوم اثنين من الشهر عند منتصف الليل.
0 0 0 وزن * * ويشير إلى أنه سيتم تنفيذ المهمة في آخر يوم من أيام الأسبوع من الشهر عند منتصف الليل.
0 0/30 8-10 * * * يشير إلى أنه سيتم تنفيذ المهمة في الساعة 8:00 و8:30 و9:00 و9:30 و10:00 و10:30 كل يوم.

إعداد خاص في تعبيرات كرون

إلى جانب الرمز الخاص أعلاه، يدعم تعبير Cron أيضًا بعض القيم الخاصة المحددة مسبقًا. يمكن استخدام هذه القيم بدلاً من الحقول.

    @سنويًا أو @سنويًا:يدير وظيفة مرة واحدة في السنة. على سبيل المثال، '0 0 0 1 1 *' .@شهريا: يتم تشغيل الوظيفة مرة واحدة في الشهر. على سبيل المثال، '0 0 0 1 * *'. @أسبوعي: يتم تشغيل العمل مرة واحدة في الأسبوع. على سبيل المثال، '0 0 0 * * 0'. @يوميًا أو @منتصف الليل:يدير العمل مرة واحدة في اليوم. على سبيل المثال، '0 0 0 * * *'. @ساعيا: يدير العمل كل ساعة. على سبيل المثال، '0 0 * * * *'.

استخدام تعبير Cron في جافا

توفر Java نظام جدولة وظائف مفتوح المصدر يقوم بجدولة مهمة لوحدة زمنية محددة. يمكننا تنزيل برنامج جدولة الكوارتز من الموقع الرسمي.

برنامج التغليف

من حيث البرمجة، الوظيفة هي فئة تحتوي على المهمة التي سيتم تنفيذها. لكن السؤال هو كيفية جدولة ذلك. لجدولة مهمة ما، نحدد المشغل ونحدد متى سيتم تنفيذ المهمة.

إذا أردنا تنفيذ جدولة الكوارتز، يمكننا إضافة التبعية، على النحو التالي:

 org.quartz-scheduler quartz 2.2.1 

ملاحظة: قبل تنفيذ برنامج Java التالي، تأكد من أنك قمت بإضافته الكوارتز-2.2.1.جرة الملف في المسار، وإلا سوف تحصل على خطأ.

دعونا نرى تنفيذ تعبير cron والوظيفة من خلال برنامج Java.

الخطوة 1: إنشاء مشروع مافن. لقد أنشأنا مع الاسم كرونمثال .

الخطوة 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(); } } } 

عندما ننتهي من جميع الخطوات المذكورة أعلاه، يبدو دليل المشروع كما يلي:

تعبير جافا كرون

الخطوة 6: قم بتشغيل برنامج Java أعلاه لرؤية الإخراج.

تعبير جافا كرون

نلاحظ أن كل وظيفة يتم تنفيذها في فترة زمنية محددة.