引入需要的依赖:dependenciesdependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactIddependencydependencygroupIdorg。springframework。bootgroupIdspringbootstarterlog4j2artifactIdoptionaltrueoptionaldependency!springboot2。3版本后,如果需要使用校验,需手动导入validation包dependencygroupIdorg。springframework。bootgroupIdspringbootstartervalidationartifactIddependencydependencygroupIdorg。projectlombokgroupIdlombokartifactIdoptionaltrueoptionaldependencydependencies 启动类:packagecom。wl。importorg。springframework。boot。SpringAimportorg。springframework。boot。autoconfigure。SpringBootAimportorg。springframework。scheduling。annotation。EnableSEnableSchedulingSpringBootApplicationpublicclassDemoApplication{publicstaticvoidmain(String〔〕args){SpringApplication。run(DemoApplication。class,args);System。out。println(()启动成功!!!());}} 配置文件application。yml,只定义了服务端口:server:port:8089 定时任务执行时间配置文件:taskconfig。ini:printTime。cron010? 定时任务执行类:packagecom。wl。demo。importlombok。Dimportlombok。extern。slf4j。Slf4j;importorg。springframework。beans。factory。annotation。Vimportorg。springframework。context。annotation。PropertySimportorg。springframework。scheduling。Timportorg。springframework。scheduling。TriggerCimportorg。springframework。scheduling。annotation。SchedulingCimportorg。springframework。scheduling。config。ScheduledTaskRimportorg。springframework。scheduling。support。CronTimportorg。springframework。stereotype。Cimportjava。time。LocalDateTimportjava。util。DDataSlf4jComponentPropertySource(classpath:taskconfig。ini)publicclassScheduleTaskimplementsSchedulingConfigurer{Value({printTime。cron})privateSOverridepublicvoidconfigureTasks(ScheduledTaskRegistrartaskRegistrar){动态使用cron表达式设置循环间隔taskRegistrar。addTriggerTask(newRunnable(){Overridepublicvoidrun(){log。info(Currenttime:{},LocalDateTime。now());}},newTrigger(){OverridepublicDatenextExecutionTime(TriggerContexttriggerContext){使用CronTrigger触发器,可动态修改cron表达式来操作循环规则CronTriggercronTriggernewCronTrigger(cron);DatenextExecutionTimecronTrigger。nextExecutionTime(triggerContext);returnnextExecutionT}});}} 编写一个接口,使得可以通过调用接口动态修改该定时任务的执行时间:packagecom。wl。demo。importcom。wl。demo。task。ScheduleTimportlombok。extern。slf4j。Slf4j;importorg。springframework。beans。factory。annotation。Aimportorg。springframework。web。bind。annotation。GetMimportorg。springframework。web。bind。annotation。RequestMimportorg。springframework。web。bind。annotation。RestCSlf4jRestControllerRequestMapping(test)publicclassTestController{privatefinalScheduleTaskscheduleTAutowiredpublicTestController(ScheduleTaskscheduleTask){this。scheduleTaskscheduleT}GetMapping(updateCron)publicStringupdateCron(Stringcron){log。info(newcron:{},cron);scheduleTask。setCron(cron);}} 启动项目,可以看到任务每10秒执行一次: 访问接口,传入请求参数cron表达式,将定时任务修改为15秒执行一次: 可以看到任务变成了15秒执行一次 除了上面的借助cron表达式的方法,还有另一种触发器,区别于CronTrigger触发器,该触发器可随意设置循环间隔时间,不像cron表达式只能定义小于等于间隔59秒。packagecom。wl。demo。importlombok。Dimportlombok。extern。slf4j。Slf4j;importorg。springframework。beans。factory。annotation。Vimportorg。springframework。context。annotation。PropertySimportorg。springframework。scheduling。Timportorg。springframework。scheduling。TriggerCimportorg。springframework。scheduling。annotation。SchedulingCimportorg。springframework。scheduling。config。ScheduledTaskRimportorg。springframework。scheduling。support。CronTimportorg。springframework。scheduling。support。PeriodicTimportorg。springframework。stereotype。Cimportjava。time。LocalDateTimportjava。util。DDataSlf4jComponentPropertySource(classpath:taskconfig。ini)publicclassScheduleTaskimplementsSchedulingConfigurer{Value({printTime。cron})privateSprivateLongtimer10000L;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);returnnextExecutionT}});}} 增加一个修改时间的接口:packagecom。wl。demo。importcom。wl。demo。task。ScheduleTimportlombok。extern。slf4j。Slf4j;importorg。springframework。beans。factory。annotation。Aimportorg。springframework。web。bind。annotation。GetMimportorg。springframework。web。bind。annotation。RequestMimportorg。springframework。web。bind。annotation。RestCSlf4jRestControllerRequestMapping(test)publicclassTestController{privatefinalScheduleTaskscheduleTAutowiredpublicTestController(ScheduleTaskscheduleTask){this。scheduleTaskscheduleT}GetMapping(updateCron)publicStringupdateCron(Stringcron){log。info(newcron:{},cron);scheduleTask。setCron(cron);}GetMapping(updateTimer)publicStringupdateTimer(Longtimer){log。info(newtimer:{},timer);scheduleTask。setTimer(timer);}} 测试结果: