Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Menjadualkan Pekerjaan dengan Kadar Tetap Boleh Laras Secara Dinamik pada Musim Bunga?

Bagaimanakah Saya Boleh Menjadualkan Pekerjaan dengan Kadar Tetap Boleh Laras Secara Dinamik pada Musim Bunga?

Susan Sarandon
Lepaskan: 2024-11-27 15:27:11
asal
1015 orang telah melayarinya

How Can I Schedule Jobs with Dynamically Adjustable Fixed Rates in Spring?

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 {
    // ...
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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)
        }
    );
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan