Rumah >Java >javaTutorial >Bagaimana untuk mengubah suai Jadual dalam SpringBoot secara dinamik

Bagaimana untuk mengubah suai Jadual dalam SpringBoot secara dinamik

WBOY
WBOYke hadapan
2023-05-15 20:58:151821semak imbas

SpringBoot secara dinamik mengubah suai Berjadual

Senario:

Masa pelaksanaan Berjadual Boleh Dikonfigurasikan ditetapkan apabila projek bermula. Tiada cara untuk mengemas kini Berjadual secara automatik berdasarkan memanggil kod latar belakang. Masa pelaksanaan

Contohnya:

Masa membaca permulaan sistem Cron: 0 0 3 * * ?, format masa Cron boleh dikonfigurasikan secara dinamik dengan melaksanakan kaedah latar belakang, dan tugas pelaksanaan asal boleh dikosongkan dan masa pelaksanaan baharu boleh dilaksanakan Menetapkan masa tugas berjadual

1 Ubah suai tugas berjadual secara dinamik mengikut kelas ThreadPoolTaskScheduler dan ScheduledFuture (ThreadPoolTaskScheduler tidak boleh menggunakan @Autowired dan tetapkan pembolehubah ahli>) 2. Ubah suai Logik kaedah latar belakang Berjadual secara dinamik (objek ialah logik pemasaan yang perlu dilaksanakan oleh kelas pelaksanaan Runnable, dan diletakkan dalam kaedah run thread)

threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
threadPoolTaskScheduler.initialize();
if(future!=null){
    future.cancel(true);
}
future=threadPoolTaskScheduler.schedule(object,new CronTrigger("需要Cron时间格式字符串") );

Logik di atas -------------------------Anda boleh merealisasikan konfigurasi Berjadual dinamik

logik berikut------ ----------------- Projek konfigurasi Mulakan pembacaan automatik DB Cron, tetapkan masa

1, @Pesan dan laksanakan kaedah override kelas CommandLineRunner dijalankan

@Override
    public void run(String... args) throws Exception {
        logger.info("系统启动 默认设置对账任务 时间");
        //获取目前DB 设置的对账时间
        GetBillTimeResp time = systemConfigService.getTime();
        //获取Cron时间格式字符串
        String timeCron = billTimeCronFormat(time.getBillTime());
        logger.info("时间为:"+timeCron);
        //Scheduler 设置每天执行。。。
        threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.initialize();
        future=threadPoolTaskScheduler.schedule(object,new CronTrigger("DB Cron时间格式字符串")); }

Projek SpringBoot @Scheduled membaca parameter dinamik

1. Berdasarkan pembangunan boleh dikonfigurasikan @Scheduled

application.propertites: 
read.timer.parmas=0 0/1 * * * *

Kelas masa:

@Component
public class ScheduledService {
Logger logger= LoggerFactory.getLogger(ScheduledService.class);
    @Scheduled(cron = "${read.timer.parmas}")
    public void readConfigTable(){
        logger.info("*****.read.timer.parmas");
    }
}

Kelas permulaan:
@SpringBootApplication
@EnableScheduling  //必须
public class DataApplication {
  public static void main(String[] args) {
        SpringApplication.run(DataApplication.class,args);
    }
}

2. Berdasarkan pelaksanaan kod

(1) Kod Teras

@Component
@EnableScheduling
public class TestScheduledParams implements SchedulingConfigurer{
    Logger logger= LoggerFactory.getLogger(TestScheduledParams.class);
 
    public static  String DEFAULT_CORN="0/3 * * * * *";
    //##动态传参要给默认值。
    public static String corn=DEFAULT_CORN;
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {     
        taskRegistrar.addTriggerTask(new Runnable() {
            @Override
            public void run() {
               // logger.info("定时任务逻辑");
            }
        }, new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                //任务触发,可修改任务的执行周期
                CronTrigger cronTrigger = new CronTrigger(corn);
                Date date = cronTrigger.nextExecutionTime(triggerContext);
                return date;
            }
        });
    }
}

(2) Penetapan parameter dinamik dan penetapan kelas atau kaedah lain

TestScheduledParams.corn="0/20 * * * * *"

Atas ialah kandungan terperinci Bagaimana untuk mengubah suai Jadual dalam SpringBoot secara dinamik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam