在春季启动项目中,通过@EnableScheduling可启用弹簧自带的定时任务支持,在通过@Scheduled注解定义定时任务,但是通过注解只能编写固定时间的定时任务,无法动态调整定时间隔,可通过实现SchedulingConfigurer接口实现动态定时任务注册。
<强>对比石英的优缺点强>
优点:配置非常简单
缺点:
-
<李>不支持分布式部署李>
<李>不支持动态配置定时任务李>
<李>不支持持久化李>
其实这几个缺点归根结底都是因为不支持持久化,所以如果项目需要持久化定时任务,还是要选择石英比较好。
参考代码:
包org.cent.demo.scanner.schedule; 进口lombok.AllArgsConstructor; 进口lombok.Data; 进口lombok.extern.slf4j.Slf4j; 进口org.springframework.context.annotation.Configuration; 进口org.springframework.scheduling.Trigger; 进口org.springframework.scheduling.annotation.EnableScheduling; 进口org.springframework.scheduling.annotation.SchedulingConfigurer; 进口org.springframework.scheduling.config.ScheduledTaskRegistrar; 进口org.springframework.scheduling.support.CronTrigger; 进口java.util.Arrays; 进口并不知道;/* * * @author:分 * 292462859:292462859 @qq.com * @date: 2019/1/16。 * @description: */@ configuration @EnableScheduling @Slf4j 公共类DynamicSchedule实现SchedulingConfigurer {/* * *测试数据,实际可从数据库获取 */私人List任务=arrays . aslist ( 新任务(1,“任务1”,“30 * * * * * */?, 新任务(2,“任务2”,“30 * * * * * */?, 新任务(3,“任务3”,“30 * * * * * */?, 新任务(4,“任务4”、“30 * * * * * */?, 新任务(5,“任务5”,“30 * * * * * */?, 新任务(6,“任务6”,“30 * * * * * */?, 新任务(7,“任务7”,“30 * * * * * */?, 新任务(8,“任务8”,“30 * * * * * */?, 新任务(9,“任务9”、“30 * * * * * */?, 新任务(10,”任务10”,“30 * * * * * */? ); @Override 公共空间configureTasks (ScheduledTaskRegistrar ScheduledTaskRegistrar) { 任务。forEach(任务→{//任务执行线程 可运行Runnable=()→log.info(“执行任务”{},task.getId ());//任务触发器 触发器触发=triggerContext→{//获取定时触发器,这里可以每次从数据库获取最新记录,更新触发器,实现定时间隔的动态调整 CronTrigger CronTrigger=new CronTrigger (task.getCron ()); 返回cronTrigger.nextExecutionTime (triggerContext); };//注册任务 scheduledTaskRegistrar。addTriggerTask (runnable,触发); }); } @ data @AllArgsConstructor 静态类任务{/* * *主键ID */私人int id;/* * *任务名称 */私人字符串名称;/* * * cron表达式 */私人字符串cron; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。