Rumah >Java >javaTutorial >Bagaimana untuk Menetapkan Kadar Tetap Secara Dinamik untuk Pekerjaan Berjadual pada Musim Bunga?

Bagaimana untuk Menetapkan Kadar Tetap Secara Dinamik untuk Pekerjaan Berjadual pada Musim Bunga?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-05 16:25:12696semak imbas

How to Dynamically Set a Fixed Rate for Scheduled Jobs in Spring?

Menjadualkan Kerja dengan Spring Secara Program: Cara Menetapkan Kadar Tetap Dinamik

Rangka Kerja Spring menyediakan cara yang mudah untuk menjadualkan kerja menggunakan @Schedulednya anotasi. Walau bagaimanapun, apabila kadar pelaksanaan yang diingini perlu diselaraskan tanpa menggunakan semula aplikasi, pendekatan yang lebih dinamik diperlukan.

Untuk mengatasinya, Spring membenarkan penggunaan Trigger dan bukannya anotasi. Pencetus membolehkan pengiraan masa pelaksanaan seterusnya secara dinamik.

Melaksanakan penjadualan dinamik ini melibatkan beberapa langkah penting:

  1. Mencipta Pencetus: Laksanakan kelas yang memanjangkan antara muka Pencetus dan menyediakan pelaksanaan untuk kaedah nextExecutionTime(). Kaedah ini mengira masa pelaksanaan seterusnya berdasarkan logik yang diperlukan, seperti mendapatkan semula nilai secara pengaturcaraan.
  2. Mengkonfigurasi Penjadual: Gunakan antara muka SchedulingConfigurer dalam kelas konfigurasi Spring untuk menyediakan penjadual . Ini melibatkan mencipta kacang Pelaksana dan mendaftarkan tugas pencetus dengan pelaksanaan Pencetus tersuai anda.
  3. Menjadualkan Kerja: Jadualkan kerja menggunakan Runnable yang melaksanakan tugas yang diingini. Tugas pencetus akan mengendalikan penjadualan pelaksanaan berdasarkan Pencetus tersuai anda.

Berikut ialah contoh cara pendekatan ini boleh dilaksanakan dalam kod:

@Configuration
@EnableScheduling
public class MyAppConfig implements SchedulingConfigurer {

    @Autowired
    Environment env;

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }

    @Bean(destroyMethod = "shutdown")
    public Executor taskExecutor() {
        return Executors.newScheduledThreadPool(100);
    }

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.setScheduler(taskExecutor());
        taskRegistrar.addTriggerTask(
                new Runnable() {
                    @Override public void run() {
                        myBean().getSchedule();
                    }
                },
                new Trigger() {
                    @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();
                    }
                }
        );
    }
}

Dengan pendekatan ini, anda dapatkan fleksibiliti untuk melaraskan kadar penjadualan secara dinamik tanpa perlu menggunakan semula aplikasi Spring anda. Kadar pelaksanaan yang ditentukan secara pemrograman membolehkan senario penjadualan yang lebih maju dan penyepaduan dengan sistem luaran.

Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Kadar Tetap Secara Dinamik untuk Pekerjaan Berjadual pada Musim Bunga?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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