Baru-baru ini, perlu untuk mengimplementasikan tugas eksekusi yang dijadwalkan dalam proyek, seperti perhitungan waktu poin anggota, memanggil antarmuka pihak ketiga, dll. Karena proyek menggunakan kerangka kerja Spring, diperkenalkan di sini bersamaan dengan kerangka kerja Spring.
Menulis pekerjaan rumah
Yaitu pojo biasa, sebagai berikut:
package com.pcmall.task;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class TaskA {private static Logger logger = LoggerFactory.getLogger(TaskA.class);public void taskA1(){for(int i = 0; i <100; i ++) {System.out.println ("---- a1 ----"+i);}} public void Taska2 () {untuk (int i = 0; i <100; i ++) {System.out.println ("----- A2 ------"+i)}}}}}}}}}}}}}}}}} {"-----; Atur tugas tertentu dalam file konfigurasi pegas
<? Xml Version = "1.0" encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" XSI: schemalocation = "http:/wwork.wwork.or http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="taskA"></bean><bean id="taskB"></bean><bean><bean id="taskJobA1"><property name="targetObject" ref="taskA"></property><property name="targetMethod" value="taskA1"></property><property name="concurrent" value="false"></property></bean><bean id="taskJobA2"><property name="targetObject" ref="taskA"></property><property name="targetMethod" value="taskA2"></property><property name="concurrent" value="false"></property></bean><bean ID = "TaskJobb1"> <name properti = "targetObject" ref = "TaskB"> </property> <Properti name = "targetMethod" value = "TaskB1"> </property> <Properti Nama = "Concurrent" Value = "False"> </properties> </tean "<bean id =" TaskjOBB2 "> </false =" target "</bean" <bean id = "TaskJobb2"> <false = "Target" </bean "<bean id =" TaskJobb2 "> <false =" target "target" name = "TargetMethod" value = "TaskB2"> </property> <Properti Nama = "concurrent" value = "false"> </properti> </bean> <bean id = "taska1trigger"> <name properti = "jobdetail"> <ref bean = "TaskjoBa1"/</Properti> <Properti name = "cronex =" cronex = "TaskJoba1"/</properti> <Property name = "Cronex =" cronex 0 ? </value> </pruptent> </ bean> <bean id = "Taska2trigger"> <name properti = "jobdetail"> <ref bean = "TaskJoba2"/> </property> <Properti nama = "cronexpression"> <value> 0 0/2 * *? bean = "TaskJobb1"/> </propt> <name properti = "cronexpression"> <value> 0 0/1 * * *? </value> </prop Property> </bean> <bean id = "TaskB2Trigger"> </name Properties = "cru =" cru = "TaskJobb2"/</name 0 ? </value> </preate> </ bean> <bean id = "scheduler" class = "org.springframework.scheduling.quartz.schedulerFactoryBean"> <name properti = "triggers"> <cist> <ref bean = "Taska1trigger" / /<ref reft ">" Taska2 /Taska /Taska1trigger " /> <Ref Ref Bean =" Tasca2 bean = "taskb2trigger"/> </cist> </pruptent> </t bean> </tact>
Melihat
Pemicu hanya dapat memicu satu pekerjaan, tetapi pekerjaan dapat dipicu oleh beberapa pemicu, yang akan menyebabkan masalah konkurensi kali ini. Di Kuarsa, jika Anda tidak ingin menjalankan pekerjaan yang sama secara bersamaan, Anda dapat mengimplementasikan statefuljob alih -alih pekerjaan. Jika Anda menggunakan MethodInvokingJoBdetailFactoryBean di musim semi, Anda dapat melakukannya dengan mengatur properti concurrent = "false".
Catatan Akhir
Manfaat menggunakan kuarsa di musim semi alih -alih aplikasi tunggal meliputi:
Menempatkan semua pengaturan penjadwalan tugas di tempat yang sama membuat tugas mudah dipelihara.
Pengkodean pekerjaan hanya mungkin, pemicu dan penjadwal dapat diatur dengan konfigurasi
Anda dapat menggunakan kacang pojo java untuk menjalankan pekerjaan tanpa menerapkan antarmuka pekerjaan
Penggunaan Ekspresi Cron Detail
Karakter Khusus Diizinkan oleh Field Nilai yang Diijinkan
0-59 detik, - * /
0-59, - * /
Jam 0-23, - * /
Tanggal 1-31, - *? / Lwc
Bulan 1-12 atau Jan-Des,- * /
Minggu 1-7 atau Sun-Sat,- *? / LC #
Tahun (opsional) tinggalkan kosong, 1970-2099, - * / /
contoh:
0/5 * * * *? : Jalankan setiap 5 detik
Karakter "" digunakan untuk menentukan semua nilai. Misalnya: "" berarti "per menit" di bidang menit.
"?" Karakter hanya digunakan di bidang tanggal dan hari dalam seminggu. Ini digunakan untuk menentukan "nilai-nilai non-jelas". Ini berguna ketika Anda perlu menentukan sesuatu oleh salah satu dari dua domain ini. Anda akan mengerti dengan melihat contoh di bawah ini.
Dua elemen tanggal di bulan ini dan tanggal dalam seminggu saling eksklusif bersama. Tetapkan tanda tanya untuk menunjukkan bahwa Anda tidak ingin mengatur bidang itu.
Karakter "-" digunakan untuk menentukan rentang. Misalnya: "10-12" berarti "10, 11, 12".
Karakter "," digunakan untuk menentukan nilai tambahan. Misalnya: "Mon, Wed, Fri" berarti "Sen, Rabu, Jumat" di bidang minggu.
Karakter "/" digunakan untuk menentukan kenaikan. Sebagai contoh: "0/15" di bidang kedua berarti 0, 15, 30 dan 45 detik per menit. "5/15" mewakili 5, 20, 35 dan 50 per jam di bidang menit. Simbol "" adalah sebelum "/" (seperti:/10) setara dengan 0 sebelum "/" (seperti: 0/10). Ingat satu esensi: setiap bidang numerik dari suatu ekspresi adalah seperangkat nilai maksimum dan minimum, seperti: set bidang detik dan menit adalah 0-59, bidang tanggal adalah 1-31, dan bidang bulan adalah 1-12. Karakter "/" dapat membantu Anda mendapatkan nilai numerik yang sesuai di setiap bidang karakter. Misalnya: "7/6" hanya akan dipicu pada bulan Juli ketika domain bulan, dan tidak berarti setiap Juni.
L adalah kata yang dihilangkan untuk 'terakhir' yang dapat mewakili bidang hari dan hari-hari, tetapi artinya berbeda di dua bidang, misalnya, bidang hari-bulan mewakili hari terakhir sebulan. Jika bidang hari-minggu berarti '7' atau 'SAT', jika angkanya didahului di bidang hari-minggu, itu berarti beberapa hari terakhir dalam sebulan, seperti '6L' berarti Jumat terakhir sebulan.
Karakter "W" hanya memungkinkan bidang tanggal muncul. Karakter ini digunakan untuk hari kerja terbaru dari tanggal yang ditentukan. Misalnya: Jika Anda menulis "15W" di bidang tanggal, itu berarti: Hari kerja terbaru bulan ini pada tanggal 15 bulan ini. Jadi, jika tanggal 15 adalah hari Sabtu, misinya akan dipicu pada tanggal 14. Jika 15 lebih baik hari Minggu, tugas akan dipicu pada hari Senin, yaitu, tanggal 16. Jika Anda mengisi "1W" di bidang tanggal, bahkan jika tanggal 1 adalah hari Sabtu, tugas itu hanya akan dipicu pada Senin depan, yaitu, yang ke -3. Hari kerja terbaru yang ditentukan oleh karakter "W" tidak dapat dilintasi ke bulan. Karakter "W" hanya dapat digunakan dengan nilai terpisah, dan tidak dapat menjadi bidang numerik, seperti: 1-15W salah.
"L" dan "W" dapat digunakan dengan cara bersama di bidang tanggal, dan LW mewakili hari kerja minggu terakhir bulan itu.
Karakter "#" hanya diizinkan muncul di domain hari minggu. Karakter ini digunakan untuk menentukan hari tertentu dalam sebulan. Misalnya: "6#3" berarti Jumat minggu ketiga bulan itu (6 berarti Jumat, 3 berarti Minggu 3). "2#1" berarti Senin minggu pertama setiap bulan. "4#5" berarti hari Rabu minggu kelima.
Karakter "C" diizinkan muncul di bidang tanggal dan hari dalam seminggu. Karakter ini bergantung pada "kalender" tertentu. Dengan kata lain, nilai ekspresi ini tergantung pada hasil perhitungan dari "kalender" yang relevan. Jika tidak ada asosiasi "kalender", itu setara dengan semua "kalender" yang disertakan. Misalnya: bidang tanggal adalah "5C" untuk menunjukkan hari pertama dalam "kalender" terkait, atau 5 hari terakhir dari hari pertama bulan itu. Hari dalam seminggu adalah "1C" yang berarti hari pertama dalam "kalender" yang terkait, atau hari berikutnya dari hari pertama dalam seminggu, yaitu, hari demi hari Minggu (Senin).
Contoh ekspresi
"0 0 12 * *?" Dipicu pada jam 12 siang setiap hari "0 15 10? * *" Dipicu pada pukul 10:15 setiap hari "0 15 10 * *?" Dipicu pada pukul 10:15 setiap hari "0 15 10 * *? *" Dipicu pada pukul 10:15 setiap hari "0 0/5 14 * *? 2005" dipicu pada pukul 10:15 setiap hari "0 * 14 * *?" Dipicu pada pukul 10:15 setiap hari "0 0/5 14 * *?" Dipicu pada pukul 14:15 hingga 14:59 setiap hari "0 0/5 14 * *?" Dipicu pada pukul 14:15 hingga 14:55 setiap hari "0 0/5 14,18 * *?" Dipicu pada 5 menit setiap hari dari 14:15 hingga 14:55 setiap hari "0 0/5 14,18 * *?" 0 0-5 14 * *? "0 10,44 14? 3 Rabu" 0 10 10 10 10 10 Rabu Maret Setiap tahun pukul 2:10 dan 2:44 setiap tahun pada pukul 2:10 dan 2:44 setiap tahun pada pukul 2:10 dan 2:44 setiap tahun pada pukul 2:10 dan 2:44 malam setiap tahun di 15 10? * Mon-Jri "0 15 10 15 *?" 0 15 10 15 *? "0 15 10 15 10 15 *?" 0 15 15 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 * 6L 2002-2005 "dipicu pada pukul 10:15 pada hari Jumat terakhir setiap bulan dari 2002 hingga 2005" 0 15 10? * 6#3 "dipicu pada pukul 10:15 pagi pada hari Jumat ketiga setiap bulan
Artikel di atas Spring mengintegrasikan Kuarsa untuk mengimplementasikan penjadwalan tugas waktu adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.