引入需要的依赖:dependenciesdependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactIddependencydependencygroupIdorg。springframework。bootgroupIdspringbootstarterlog4j2artifactIdoptionaltrueoptionaldependency!springboot2。3版本后,如果需要使用校验,需手动导入validation包dependencygroupIdorg。springframework。bootgroupIdspringbootstartervalidationartifactIddependencydependencygroupIdorg。projectlombokgroupIdlombokartifactIdoptionaltrueoptionaldependencydependencies 启动类:packagecom。wl。demo;importorg。springframework。boot。SpringApplication;importorg。springframework。boot。autoconfigure。SpringBootApplication;importorg。springframework。scheduling。annotation。EnableScheduling;EnableSchedulingSpringBootApplicationpublicclassDemoApplication{publicstaticvoidmain(String〔〕args){SpringApplication。run(DemoApplication。class,args);System。out。println(()启动成功!!!());}} 配置文件application。yml,只定义了服务端口:server:port:8089 定时任务执行时间配置文件:taskconfig。ini:printTime。cron010? 定时任务执行类:packagecom。wl。demo。task;importlombok。Data;importlombok。extern。slf4j。Slf4j;importorg。springframework。beans。factory。annotation。Value;importorg。springframework。context。annotation。PropertySource;importorg。springframework。scheduling。Trigger;importorg。springframework。scheduling。TriggerContext;importorg。springframework。scheduling。annotation。SchedulingConfigurer;importorg。springframework。scheduling。config。ScheduledTaskRegistrar;importorg。springframework。scheduling。support。CronTrigger;importorg。springframework。stereotype。Component;importjava。time。LocalDateTime;importjava。util。Date;DataSlf4jComponentPropertySource(classpath:taskconfig。ini)publicclassScheduleTaskimplementsSchedulingConfigurer{Value({printTime。cron})privateStringcron;OverridepublicvoidconfigureTasks(ScheduledTaskRegistrartaskRegistrar){动态使用cron表达式设置循环间隔taskRegistrar。addTriggerTask(newRunnable(){Overridepublicvoidrun(){log。info(Currenttime:{},LocalDateTime。now());}},newTrigger(){OverridepublicDatenextExecutionTime(TriggerContexttriggerContext){使用CronTrigger触发器,可动态修改cron表达式来操作循环规则CronTriggercronTriggernewCronTrigger(cron);DatenextExecutionTimecronTrigger。nextExecutionTime(triggerContext);returnnextExecutionTime;}});}} 编写一个接口,使得可以通过调用接口动态修改该定时任务的执行时间:packagecom。wl。demo。controller;importcom。wl。demo。task。ScheduleTask;importlombok。extern。slf4j。Slf4j;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。web。bind。annotation。GetMapping;importorg。springframework。web。bind。annotation。RequestMapping;importorg。springframework。web。bind。annotation。RestController;Slf4jRestControllerRequestMapping(test)publicclassTestController{privatefinalScheduleTaskscheduleTask;AutowiredpublicTestController(ScheduleTaskscheduleTask){this。scheduleTaskscheduleTask;}GetMapping(updateCron)publicStringupdateCron(Stringcron){log。info(newcron:{},cron);scheduleTask。setCron(cron);returnok;}} 启动项目,可以看到任务每10秒执行一次: 访问接口,传入请求参数cron表达式,将定时任务修改为15秒执行一次: 可以看到任务变成了15秒执行一次 除了上面的借助cron表达式的方法,还有另一种触发器,区别于CronTrigger触发器,该触发器可随意设置循环间隔时间,不像cron表达式只能定义小于等于间隔59秒。packagecom。wl。demo。task;importlombok。Data;importlombok。extern。slf4j。Slf4j;importorg。springframework。beans。factory。annotation。Value;importorg。springframework。context。annotation。PropertySource;importorg。springframework。scheduling。Trigger;importorg。springframework。scheduling。TriggerContext;importorg。springframework。scheduling。annotation。SchedulingConfigurer;importorg。springframework。scheduling。config。ScheduledTaskRegistrar;importorg。springframework。scheduling。support。CronTrigger;importorg。springframework。scheduling。support。PeriodicTrigger;importorg。springframework。stereotype。Component;importjava。time。LocalDateTime;importjava。util。Date;DataSlf4jComponentPropertySource(classpath:taskconfig。ini)publicclassScheduleTaskimplementsSchedulingConfigurer{Value({printTime。cron})privateStringcron;privateLongtimer10000L;OverridepublicvoidconfigureTasks(ScheduledTaskRegistrartaskRegistrar){动态使用cron表达式设置循环间隔taskRegistrar。addTriggerTask(newRunnable(){Overridepublicvoidrun(){log。info(Currenttime:{},LocalDateTime。now());}},newTrigger(){OverridepublicDatenextExecutionTime(TriggerContexttriggerContext){使用CronTrigger触发器,可动态修改cron表达式来操作循环规则CronTriggercronTriggernewCronTrigger(cron);DatenextExecutionTimecronTrigger。nextExecutionTime(triggerContext);使用不同的触发器,为设置循环时间的关键,区别于CronTrigger触发器,该触发器可随意设置循环间隔时间,单位为毫秒PeriodicTriggerperiodicTriggernewPeriodicTrigger(timer);DatenextExecutionTimeperiodicTrigger。nextExecutionTime(triggerContext);returnnextExecutionTime;}});}} 增加一个修改时间的接口:packagecom。wl。demo。controller;importcom。wl。demo。task。ScheduleTask;importlombok。extern。slf4j。Slf4j;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。web。bind。annotation。GetMapping;importorg。springframework。web。bind。annotation。RequestMapping;importorg。springframework。web。bind。annotation。RestController;Slf4jRestControllerRequestMapping(test)publicclassTestController{privatefinalScheduleTaskscheduleTask;AutowiredpublicTestController(ScheduleTaskscheduleTask){this。scheduleTaskscheduleTask;}GetMapping(updateCron)publicStringupdateCron(Stringcron){log。info(newcron:{},cron);scheduleTask。setCron(cron);returnok;}GetMapping(updateTimer)publicStringupdateTimer(Longtimer){log。info(newtimer:{},timer);scheduleTask。setTimer(timer);returnok;}} 测试结果: