Menambahkan tugas waktu ke program web Java, berikut adalah dua cara: 1. Gunakan suntikan pendengar; 2. Gunakan anotasi musim semi @scheduled injection.
Formulir kedua disarankan.
1. Gunakan suntikan pendengar
①: Buat kelas pendengar:
import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class TimerDataTaskListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent servletContextEvent) { new TimerManager(); } @Override public void ContextDestroyed (ServletContextEvent ServletContextEvent) {}}②: Buat kelas tugas waktunya:
Impor java.util.calendar; import java.util.date; impor java.util.timer; TimerManager kelas publik {// interval waktu: 24H private static final long periode_day = 24 * 60 * 60 * 1000; Public TimeManManager () {Calendar Calendar = Calendar.GetInstance (); // Kustomisasi eksekusi calendar.set (calendar.hour_of_day, 12); Calendar.set (Calendar.Minute, 30); Calendar.set (Calendar.Second, 30); Tanggal tanggal = calendar.getTime (); // Waktu pertama kali untuk melaksanakan tugas waktu // Jika titik waktu telah berlalu, eksekusi akan dimulai pada hari kedua jika (date. Before (tanggal baru ())) {date = this.addday (tanggal, 1); } Timer timer = timer baru (); TimerTaskService Task = TimertaskService baru (); // Jadwalkan tugas yang ditentukan untuk memulai eksekusi keterlambatan tetap berulang pada waktu yang ditentukan. timer.schedule (tugas, tanggal, period_day); } // Tingkatkan atau kurangi jumlah hari addday tanggal pribadi (tanggal tanggal, int num) {calendar startdt = calendar.getInstance (); startdt.settime (tanggal); startdt.add (calendar.day_of_month, num); return startdt.getTime (); }}③: Buat kelas TimerTask:
Impor java.util.timertask; kelas publik TimerTaskService memperluas timertask {@override public void run () {coba {// logika tugas yang akan dieksekusi ditulis di sini System.out.println ("Masukkan kata sandi berhasil!"); } catch (Exception e) {System.out.println ("Masukkan Kata Sandi Gagal!"); }}}④: Daftarkan pendengar di web.xml
<!-TimerDataTaskListener Listener-> <Distener> <Distener-Class> com.jsiqi.resume.service.timerDataPaskListener </engeaner-class> </listener>
2. Suntikan menggunakan anotasi pegas
Kerangka kerja untuk proyek saya adalah Spring + Springmvc + Mybatis
Contoh kode:
impor org.springframework.scheduling.annotation.scheduled; impor org.springframework.stereotype.component; @ComponentPublic class timerTask {@scheduled (cron = " */30 * * * *") // Execute test public void () {cron = " */30 * * * *") System.out.println ("Masukkan kata sandi berhasil!"); } catch (Exception e) {System.out.println ("Masukkan Kata Sandi Gagal!"); }}}Pengaturan waktu waktu adalah sebagai berikut:
Konfigurasi Crontrigger Format penuh adalah: [detik] [menit] [jam] [hari] [bulan] [minggu] [tahun] Contoh: 0 0 10,14,16 * *? 10 pagi setiap hari, 2 siang, 4: 0 0/30 9-17 * *? 0 setengah jam selama sembilan hingga lima jam kerja 0 0 12? * Wed menunjukkan bahwa setiap hari Rabu jam 12 siang "0 0 12 * *?" 0 15 10 * *? "10:15 setiap hari dipicu" 0 15 10 * *? 2005 "2005 Pemicu Harian" 0 * 14 * *? "Pemicu" 0 0/5 14 * *? "Pemicu" 0 0/5 14 * *? "Pemicu" 0 0/5 14,18 * *? "Pemicu" 0 0/5 14,18 * *? "Trigger" 0 0-5 14 *? "Pemicu" 0 0-5 14 *? " 3 Rabu "Pemicu" 0 10 dan 2:44 PM pada hari Rabu Maret setiap tahun 10:15 pada hari Senin hingga Jumat pemicu "0 15 10 15 *?" 10:15 pada tanggal 15 bulan ini "0 15 10 l *?" 10:15 pagi pada hari terakhir bulan ini "0 15 10? * 6l" 10:15 pada hari Jumat terakhir bulan ini "0 15 10? * 6l" 10:15 pada Jumat terakhir bulan ini "0 15 10? * 6L 2002-2005" 10:15 pada Jumat terakhir bulan terakhir "0 15 10? * 6" 10:15 pada Jumat terakhir bulan terakhir "0 15 10? * 6" 10:15 pada Jumat ketiga The Bulan "0 15 10? * 6" 10:15 pada Jumat ketiga The The Bulan "0 15" * 6 "10:15 pada Jumat ketiga The The Bulan" 0 15 " * 6#3" 10:15 pada Jumat ketiga The The Bulan "0 0 15" * 6 "10:15 pada Jumat ketiga The The Bulan" 0 15 " * 6#3" 10:15 pada Jumat ketiga The The the Bulan "0 0 15" * 6 "10:15 pada Jumat ketiga The The Last the the The Bulan" 0 0 15 " * 6" 10:15 AM pada Jumat ketiga The The The Bulan "0 0 15?
| Nomor seri | menjelaskan | Apakah itu diperlukan | Nilai yang diizinkan | Diizinkan wildcard |
|---|---|---|---|---|
| 1 | Kedua | Ya | 0-59 | , - * / / |
| 2 | titik | Ya | 0-59 | , - * / / |
| 3 | jam | Ya | 0-23 | , - * / / |
| 4 | hari | Ya | 1-31 | , - *? / Lw |
| 5 | bulan | Ya | 1-12 atau Jan-Dec | , - * / / |
| 6 | pekan | Ya | 1-7 atau Sun-Sat | , - *? / Lw |
| 7 | Tahun | TIDAK | Kosong atau 1970-2099 | , - * / / |
Deskripsi Wildcard:
* berarti semua nilai. Misalnya: atur "*" di bidang parsial, yang berarti bahwa setiap menit akan dipicu.
? berarti tidak ada nilai yang ditentukan. Skenario yang digunakan adalah bahwa Anda tidak perlu peduli dengan nilai bidang ini yang ditetapkan saat ini.
Misalnya: Suatu operasi harus dipicu pada tanggal 10 setiap bulan, tetapi tidak peduli tentang hari mingguan, sehingga bidang yang perlu diatur ke "?" diatur ke 0 0 0 10 *?
- menunjukkan interval. Misalnya, menetapkan "10-12" pada jam itu berarti bahwa 10, 11, dan 12 poin akan dipicu.
, berarti menentukan beberapa nilai, misalnya, menetapkan "mon, wed, fri" di bidang mingguan berarti memicu pada hari Senin, Rabu dan Jumat
/ Untuk pemicu tambahan. Jika pengaturan "5/15" pada yang kedua, itu berarti mulai dari 5 detik, memicu setiap 15 detik (5,20,35,50). Tetapkan '1/3' di bidang bulan untuk memulai pada tanggal 1 bulan ini dan memicu setiap tiga hari.
L berarti makna terakhir. Pada pengaturan lapangan hari, ini menunjukkan hari terakhir bulan itu (berdasarkan bulan berjalan, jika Februari, itu juga akan didasarkan pada apakah itu Runnian [lompatan]). Di lapangan minggu, ini menunjukkan hari Sabtu, yang setara dengan "7" atau "SAT". Jika angka didahului oleh "L", itu berarti data terakhir. Misalnya, menetapkan format seperti "6L" di bidang mingguan berarti "Jumat terakhir bulan itu"
W menunjukkan hari kerja terdekat dengan tanggal yang ditentukan (Senin hingga Jumat). Misalnya, atur "15W" di bidang siang hari untuk menunjukkan hari kerja terdekat dengan tanggal 15 setiap bulan. Jika tanggal 15 kebetulan hari Sabtu, cari pemicu Jumat (14) terbaru. Jika tanggal 15 bukan mingguan, cari pemicu Senin (16) terbaru. Jika tanggal 15 kebetulan pada hari kerja (Senin hingga Jumat), itu akan memicu pada hari itu. Jika format ditentukan sebagai "1W", itu menunjukkan hari kerja terbaru setelah tanggal 1 setiap bulan. Jika yang pertama adalah hari Sabtu, itu akan memicu pada tanggal 3 Senin depan. (Catatan, hanya nomor spesifik yang dapat ditetapkan sebelum "w", dan interval "-" tidak diperbolehkan).
# Nomor seri (mewakili minggu setiap bulan), misalnya, menetapkan "6# 3" di bidang minggu ini menunjukkan hari Sabtu ketiga setiap bulan. Perhatikan bahwa jika "#5" ditentukan, kebetulan tidak ada hari Sabtu di minggu kelima, konfigurasi tidak akan dipicu (paling cocok untuk Hari Ibu dan Hari Ayah);
Tips:
'L' dan 'W' dapat digunakan dalam kombinasi. Jika "LW" ditetapkan di bidang hari, itu berarti dipicu pada hari kerja terakhir bulan itu;
Pengaturan bidang minggu ini tidak sensitif jika huruf bahasa Inggris digunakan, yaitu, Mon sama dengan Senin;
Lihat:
https://www.cnblogs.com/liaojie970/p/5913272.html
http://prisonbreak.iteye.com/blog/2247216