Rumah >Java >javaTutorial >Bagaimana untuk mengubah suai Jadual dalam SpringBoot secara dinamik
Masa pelaksanaan Berjadual Boleh Dikonfigurasikan ditetapkan apabila projek bermula. Tiada cara untuk mengemas kini Berjadual secara automatik berdasarkan memanggil kod latar belakang. Masa pelaksanaan
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 * * * *
@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
@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!