实现springboot定时任务

103 阅读1分钟

定时任务的两种方法

  1. 通过注解@Scheduled的实现 代码如下
@Component
@Slf4j
public class ScheduledService {

    @Scheduled(cron = "0/5 * * * * ?")
    public void scheduled(){
        log.info("方法执行了!------");
    }
}

记得一定要在springboot的启动类上加上@EnableScheduling

  1. 通过配置类实现定时任务
@Configuration
@Slf4j
public class ScheduledConfig implements SchedulingConfigurer {

    //这个是用来查询数据库的Dao
    @Resource
    private ScheduledTableDao scheduledTableDao;
    /**
     * @Author linyu.dai
     * @Description 实现方法
     * @Date 2022/7/7 15:45
     * @Param [scheduledTaskRegistrar]
     * @return void
     */
    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        List<ScheduledTable> findall = scheduledTableDao.findall();  //数据库的任务表
        findall.forEach(v->{
            //获取任务
            Runnable run=()->{
                //Task是要执行的消息内容 我这里就打印一下
                //这里可以放微服务的调用地址 定时调用其他的微服务
                log.info(v.getTask());
            };
            //获取任务时间周期
            Trigger trigger=triggerContext -> {
                //获取cron时间周期语法
                return new CronTrigger(v.getCron()).nextExecutionTime(triggerContext);
            };
            //添加定时任务了
            scheduledTaskRegistrar.addTriggerTask(run,trigger);
        });
    }
}

数据库的数据

image.png