springboot+Scheduled定时任务


两种实现方式:
一种是注解,
另一种是读取数据库

首先启动类:
@EnableScheduling //开启定时任务Schedule

第一种:

@Component
public class Schedue {

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");


    @Scheduled(fixedRate = 5000) // 表示 每隔 5000 毫秒执行一次
    public  void reportCurrentTime() {
        System.out.println("每隔五秒钟执行一次: " + format.format(new Date()));
    }

    @Scheduled(cron = "0 18 16 * * *")  // 表示 在指定时间执行
    public void fixTimeExecution() {
        System.out.println("在指定时间 " + format.format(new Date()) + "执行");
    }
}

第二种:

@Configuration
@EnableScheduling
public class SchedueDb implements SchedulingConfigurer {

    @Mapper
    public interface CronMapper {
        @Select("select cron from cron limit 1")
        String getCron();
    }

    @Autowired
    @SuppressWarnings("all")
    CronMapper cronMapper;



    /**
     * 执行定时任务.
     */
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        taskRegistrar.addTriggerTask(
                //1.添加任务内容(Runnable)
                () -> System.out.println("执行定时任务: " + LocalDateTime.now().toLocalTime()),
                //2.设置执行周期(Trigger)
                triggerContext -> {
                    //2.1 从数据库获取执行周期
                    String cron = cronMapper.getCron();
                    //2.2 合法性校验.
                    if (StringUtils.isEmpty(cron)) {
                        // Omitted Code ..
                    }
                    //2.3 返回执行周期(Date)
                    return new CronTrigger(cron).nextExecutionTime(triggerContext);
                }
        );

    }

}




cron常用示例:

0 0 12 * * ?    每天12点触发
0 15 10 ? * *    每天1015分触发
0 15 10 * * ?    每天1015分触发
0 15 10 * * ? *    每天1015分触发
0 15 10 * * ? 2005    2005年每天1015分触发
0 * 14 * * ?    每天下午的 2点到259分每分触发
0 0/5 14 * * ?    每天下午的 2点到2点59分(整点开始,每隔5分触发)
0 0/5 14,18 * * ?    每天下午的 2点到2点59分(整点开始,每隔5分触发)   每天下午的 18点到18点59分(整点开始,每隔5分触发)
0 0-5 14 * * ?    每天下午的 2点到205分每分触发
0 10,44 14 ? 3 WED    3月分每周三下午的 210分和244分触发
0 15 10 ? * MON-FRI    从周一到周五每天上午的1015分触发
0 15 10 15 * ?    每月15号上午1015分触发
0 15 10 L * ?    每月最后一天的1015分触发
0 15 10 ? * 6L    每月最后一周的星期五的1015分触发
0 15 10 ? * 6L 2002-20052002年到2005年每月最后一周的星期五的1015分触发
0 15 10 ? * 6#3    每月的第三周的星期五开始触发
0 0 12 1/5 * ?    每月的第一个中午开始每隔5天触发一次
0 11 11 11 11 ?    每年的111111点11分触发(光棍节)

你可能感兴趣的:(定时任务)