إضافة مهام التوقيت إلى برامج الويب Java ، إليك طريقتان: 1. استخدم حقن المستمع ؛ 2. استخدم حقن التعليق التوضيحي الربيعي.
ينصح النموذج الثاني.
1. استخدم حقن المستمع
①: إنشاء فصل مستمع:
استيراد javax.servlet.servletcontextevent } Override public void contextDestroyed (servletContextevent ServletContextevent) {}}②: إنشاء فئة مهمة موقوتة:
استيراد java.util.calendar ؛ استيراد java.util.date ؛ استيراد java.util.timer ؛ الطبقة العامة timermanager {// الفاصل الزمني: 24H static static static years_day = 24 * 60 * 1000 ؛ TimerManager () {التقويم التقويم = calendar.getInstance () ؛ // تخصيص تنفيذ Calendar.set (Calendar.hour_of_day ، 12) ؛ Calendar.set (Calendar.Minute ، 30) ؛ Calendar.set (Calendar.Second ، 30) ؛ تاريخ التاريخ = calendar.getTime () ؛ // وقت أول مرة لتنفيذ المهمة الزمنية // إذا مرت النقطة الزمنية في الوقت ، سيبدأ التنفيذ في اليوم الثاني إذا (Date.beore (Date ())) {Date = this.addday (Date ، 1) ؛ } Timer Timer = New Timer () ؛ TimerTaskService Task = New TimerTaskService () ؛ // جدولة المهمة المحددة لبدء تنفيذ التأخير الثابت المتكرر في الوقت المحدد. Timer.Schedule (المهمة ، التاريخ ، الفترة) ؛ } // زيادة أو انخفاض عدد الأيام الخاصة بـ Date Date Addday (تاريخ التاريخ ، int num) {calendar startDt = calendar.getInstance () ؛ StartDt.Settime (Date) ؛ StartDt.add (Calendar.day_of_month ، num) ؛ return startdt.getTime () ؛ }}③: إنشاء فئة timertask:
استيراد java.util.timertask ؛ الطبقة العامة timertaskervice يمتد timertask {Override public void run () {try {// أن منطق المهمة المراد تنفيذه يتم كتابته هنا system.out.println ("إدراج كلمة المرور بنجاح!") ؛ } catch (استثناء e) {system.out.println ("فشل إدراج كلمة المرور!") ؛ }}}④: سجل المستمع في web.xml
<!-مستمع TimerDatAtaskListener-> <stanker> <stanker-class> com.jsiqi.resume.service.timerdataskListener </leader-class> </stanter>
2. حقن باستخدام شرح الربيع
إطار عمل مشروعي هو Spring + SpringMVC + MyBatis
مثال رمز:
استيراد org.springframework.scheduling.annotation.scheduled ؛ استيراد org.springframework.stereotype.component ؛ componentpublic class timertask timertask {try {// المهمة ". System.out.println ("أدخل كلمة المرور بنجاح!") ؛ } catch (استثناء e) {system.out.println ("فشل إدراج كلمة المرور!") ؛ }}}إعداد وقت التوقيت هو كما يلي:
تكوين Crontrigger التنسيق الكامل هو: [ثواني] [دقائق] [ساعات] [أيام] [أشهر] [أسابيع] [سنوات] مثال: 0 0 10،14،16 * *؟ 10 صباحًا كل يوم ، 2 مساءً ، 4: 0 0/30 9-17 * *؟ 0 نصف ساعة خلال تسعة إلى خمس ساعات عمل 0 0 12؟ * يشير الأربعاء إلى أنه كل يوم أربعاء في الساعة 12 ظهراً "0 0 12 *؟" 0 15 10 * *؟ "10:15 صباحًا كل يوم يتم تشغيله" 0 15 10 * *؟ 2005 "2005 Daily Trigger" 0 * 14 * *؟ "Trigger" 0 0/5 14 * *؟ "Trigger" 0 0/5 14 *؟ 3 "الزناد" 0 10 و 2:44 مساءً يوم الأربعاء من مارس كل عام 10:15 صباحًا يوم الاثنين إلى الجمعة الزناد "0 15 10 15 *؟" 10:15 صباحًا في 15 من الشهر "0 15 10 L *؟" 10:15 صباحًا في اليوم الأخير من الشهر "0 15 10؟ * 6L" 10:15 صباحًا يوم الجمعة الأخير من الشهر "0 15 10؟ * 6L" 10:15 صباحًا يوم الجمعة الأخير من الشهر "0 15 10؟
| رقم سري | يوضح | هل هو مطلوب | القيم المسموح بها | سمحت أحرف البرية |
|---|---|---|---|---|
| 1 | ثانية | نعم | 0-59 | ، - * / |
| 2 | نقطة | نعم | 0-59 | ، - * / |
| 3 | ساعة | نعم | 0-23 | ، - * / |
| 4 | يوم | نعم | 1-31 | ، - *؟ / LW |
| 5 | قمر | نعم | 1-12 أو يناير | ، - * / |
| 6 | أسبوع | نعم | 1-7 أو Sun-Sat | ، - *؟ / LW |
| 7 | سنة | لا | فارغة أو 1970-2099 | ، - * / |
وصف البطاقة البرية:
* يعني جميع القيم. على سبيل المثال: تعيين "*" على الحقل الجزئي ، مما يعني أنه سيتم تشغيل كل دقيقة.
؟ يعني عدم تحديد قيمة. السيناريو المستخدم هو أنك لست بحاجة إلى الاهتمام بقيمة هذا الحقل المحدد حاليًا.
على سبيل المثال: يتم تشغيل العملية في العاشر من كل شهر ، لكنها لا تهتم باليوم الأسبوعي ، وبالتالي فإن المجال الذي يجب ضبطه على "؟" هل تم تعيينه على 0 0 0 10 *؟
- يشير إلى الفاصل الزمني. على سبيل المثال ، يعني تعيين "10-12" في الساعة أنه سيتم تشغيل 10 و 11 و 12 نقطة.
، يعني تحديد قيم متعددة ، على سبيل المثال ، تعيين "Mon ، Wed ، Fri" في الحقل الأسبوعي يعني التشغيل يوم الاثنين والأربعاء والجمعة
/ للتشغيل الإضافي. إذا وضعت "5/15" في الثانية ، فهذا يعني أن بدءًا من 5 ثوانٍ ، مما يؤدي إلى كل 15 ثانية (5،20،35،50). تعيين "1/3" في حقل الشهر للبدء في الأول من الشهر والتشغيل كل ثلاثة أيام.
L يعني المعنى النهائي. في إعداد الميدان النهاري ، يشير إلى اليوم الأخير من الشهر (استنادًا إلى الشهر الحالي ، إذا كان فبراير ، فسيعتمد أيضًا على ما إذا كان Runnian [Leap]). في حقل الأسبوع ، يشير إلى يوم السبت ، وهو ما يعادل "7" أو "SAT". إذا سبق رقم "L" ، فهذا يعني آخر واحد من البيانات. على سبيل المثال ، يعني تعيين تنسيق مثل "6L" في الحقل الأسبوعي "يوم الجمعة الأخير من الشهر"
يشير W إلى أقرب يوم عمل إلى التاريخ المحدد (من الاثنين إلى الجمعة). على سبيل المثال ، قم بتعيين "15W" في مجال اليوم للإشارة إلى أقرب يوم عمل إلى 15 من كل شهر. إذا كان الخامس عشر هو يوم السبت ، فابحث عن أحدث الجمعة (14). إذا لم يكن الخامس عشر أسبوعيًا ، فابحث عن أحدث الإثنين (16). إذا كان الخامس عشر في أيام الأسبوع (من الاثنين إلى الجمعة) ، فسوف يؤدي ذلك إلى ذلك اليوم. إذا تم تحديد التنسيق على أنه "1W" ، فهو يشير إلى أحدث يوم عمل بعد الأول من كل شهر. إذا كان الأول يوم السبت ، فسيؤدي إلى ذلك في الثالث يوم الاثنين المقبل. (ملاحظة ، يمكن تعيين أرقام محددة فقط قبل "W" ، والفواصل الزمنية "-" غير مسموح بها).
# الرقم التسلسلي (يمثل أسبوع كل شهر) ، على سبيل المثال ، يشير تعيين "6# 3" في الحقل الأسبوع إلى السبت الثالث من كل شهر. لاحظ أنه إذا تم تحديد "#5" ، فلا يوجد يوم سبت في الأسبوع الخامس ، فلن يتم تشغيل التكوين (فهو أكثر ملاءمة لعيد الأم وعيد الأب) ؛
نصائح:
يمكن استخدام "L" و "W" في تركيبة. إذا تم تعيين "LW" في مجال اليوم ، فهذا يعني أنه يتم تشغيله في آخر يوم عمل من الشهر ؛
يعد إعداد حقل الأسبوع غير حساس للحالة إذا تم استخدام الحروف الإنجليزية ، أي أن MON هو نفسه MON ؛
الرجوع إلى:
https://www.cnblogs.com/liaojie970/p/5913272.html
http://prisonbreak.iteye.com/blog/2247216