之前写过一篇关于Quartz调度的文章。 这里简单记录下spring框架中的任务调度。

1) 添加配置类,配置开启schedule.

@Configuration
@ComponentScan({"com.xx.mvc.service.schedule"})
@EnableScheduling
public class TaskScheduleConfig {
}

2) 添加具体的任务配置

@Service
@Slf4j
public class OverdueRemindService {
    /**
     * 每天8.30点执行,计算将要超期的任务. 将任务存储到任务表
     */
    @Scheduled(cron = "0 30 8 ? * *")
    public void calculateOverdueTask() {
        System.out.println("计算将要超期的任务,当前时间:" + DateUtils.now());
    }


    //以下选自 https://blog.csdn.net/hry2015/article/details/69445289
    //网上的一些其他的方法
     private static final Logger log = Logger.getLogger(ScheduleDemo.class);

    /**
     * 每次方法执行完毕后,等待5s再执行此方法。
     *  同时只能有个线程运行此方法
     */
    @Scheduled(fixedDelay=5000)
    public void fixedDelay() {
        try {
            // 执行方法需要10s
            Thread.sleep(1000 * 10);
        } catch (InterruptedException e) {
        }
        log.info("fixedDelay--");
    }

    /**
     * 每隔5s调用一次此方法,无论之前的方法是否执行完毕
     *  同时可能有N个线程执行此方法
     *  
     */
    @Scheduled(fixedRate=5000)
    public void fixedRate() {
        try {
            // 执行方法需要10s
            Thread.sleep(1000 * 10);
        } catch (InterruptedException e) {
        }
        log.info("fixedRate--");
    }

    /***
     * initialDelay: 第一次调用此方法前的等待时间
     * 
     */ 
    @Scheduled(initialDelay=1000, fixedRate=5000)
    public void initialDelayAndfixedRate() {
        log.info("initialDelayAndfixedRate--");
    }
     /**
     * 支持cron语法:
     * 每个参数的意义分别是: second, minute, hour, day of month, month, day of week
     * 
     * 如下:周一至周五,每隔5s执行一次方法
     */
    @Scheduled(cron="*/5 * * * * SUN-MON")
    public void cron() {
        log.info("cron--");
    }
}