Menjadualkan Kerja dengan Kadar Tetap Tersuai Menggunakan Spring
Spring menyediakan cara yang mudah untuk menjadualkan kerja menggunakan anotasi. Walau bagaimanapun, kadangkala anda mungkin perlu menetapkan kadar tetap secara dinamik. Artikel ini membentangkan penyelesaian menggunakan mekanisme Pencetus Spring.
Pendekatan Berasaskan Anotasi Semasa
Secara lalai, anda boleh menggunakan @Scheduled dengan fixedRate untuk menentukan tempoh antara pelaksanaan. Walau bagaimanapun, kadar ini adalah statik dan tidak boleh diubah tanpa menggunakan semula aplikasi.
Penyelesaian: Menggunakan Pencetus
Daripada bergantung pada anotasi, anda boleh mengkonfigurasi pencetus tersuai yang mengira masa pelaksanaan seterusnya berdasarkan nilai yang dikira secara dinamik. Begini cara anda boleh mencapai ini:
1. Laksanakan Konfigurasi Penjadualan
Buat kelas konfigurasi yang mengikut antara muka SchedulingConfigurer. Kelas ini akan mengatasi penjadual lalai dan mendaftarkan pencetus tersuai anda.
@Configuration @EnableScheduling public class MyAppConfig implements SchedulingConfigurer { // ... }
2. Tentukan Pencetus
Laksanakan Pencetus yang mengembalikan masa pelaksanaan seterusnya. Dalam contoh ini, kami mengira masa seterusnya berdasarkan sifat myRate yang disimpan dalam persekitaran anda.
@Override public Date nextExecutionTime(TriggerContext triggerContext) { Calendar nextExecutionTime = new GregorianCalendar(); Date lastActualExecutionTime = triggerContext.lastActualExecutionTime(); nextExecutionTime.setTime(lastActualExecutionTime != null ? lastActualExecutionTime : new Date()); nextExecutionTime.add(Calendar.MILLISECOND, env.getProperty("myRate", Integer.class)); //you can get the value from wherever you want return nextExecutionTime.getTime(); }
3. Daftar Pencetus
Dalam kelas konfigurasi penjadualan anda, daftarkan pencetus untuk tugas anda.
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { // ... taskRegistrar.addTriggerTask( new Runnable() { @Override public void run() { myBean().getSchedule(); } }, new Trigger() { // ... (Your trigger implementation) } ); }
Dengan menggunakan pendekatan ini, anda boleh menetapkan kadar tetap secara dinamik untuk kerja berjadual anda , membolehkan anda melaraskannya tanpa mengatur semula aplikasi anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjadualkan Pekerjaan dengan Kadar Tetap Boleh Laras Secara Dinamik pada Musim Bunga?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!