Temps d'exécution planifié configurable, le planning normal est fixé au démarrage du projet, il n'y a aucun moyen de mettre à jour automatiquement le temps d'exécution planifié en fonction de l'appel du code d'arrière-plan
Système démarrage Heure de lecture Cron : 0 0 3 * *?, vous pouvez configurer dynamiquement le format de l'heure Cron en exécutant la méthode en arrière-plan, effacer la tâche d'exécution d'origine et exécuter la nouvelle heure de tâche planifiée définie
1. aux classes ThreadPoolTaskScheduler et ScheduledFuture (la classe ThreadPoolTaskScheduler ne peut pas utiliser @Autowired et définir directement les variables membres)
private ThreadPoolTaskScheduler threadPoolTaskScheduler; private ScheduledFuture<?> future;
2 Modifier dynamiquement la logique de la méthode d'arrière-plan Scheduled (l'objet est la logique de synchronisation que la classe d'implémentation Runnable doit exécuter, et mettez-le dans la méthode du thread d'exécution)
threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); threadPoolTaskScheduler.initialize(); if(future!=null){ future.cancel(true); } future=threadPoolTaskScheduler.schedule(object,new CronTrigger("需要Cron时间格式字符串") );
La logique ci-dessus ----------------------- Vous pouvez implémenter une configuration planifiée dynamique
ce qui suit logique------------------- -------- Configurez le projet pour qu'il démarre automatiquement la lecture de DB Cron, définissez le timing
1, @Order et implémentez la réécriture de la classe CommandLineRunner méthode run
@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时间格式字符串")); }
application.propertites: read.timer.parmas=0 0/1 * * * *
Classe de synchronisation :
@Component public class ScheduledService { Logger logger= LoggerFactory.getLogger(ScheduledService.class); @Scheduled(cron = "${read.timer.parmas}") public void readConfigTable(){ logger.info("*****.read.timer.parmas"); } }
Classe de démarrage :
@SpringBootApplication @EnableScheduling //必须 public class DataApplication { public static void main(String[] args) { SpringApplication.run(DataApplication.class,args); } }
(1) Core. code
@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) Autres classes ou méthodes de paramétrage dynamique
TestScheduledParams.corn="0/20 * * * * *"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!