讲解如何使用SpringBoot定时任务,并通过源码说明如何使用多线程处理各定时任务。 详细说明cron表达式用法。
摘要: 讲解如何使用SpringBoot定时任务,并通过源码说明如何使用多线程处理各定时任务。 详细说明cron表达式用法。
一、定时任务概述
后台项目开发中经常会用到定时任务,现在实现定时任务都方式也是多种多样。下面列举几种常见的定时任务实现方式:
1. Quartz:Quartz的使用相当广泛,它是一个功能强大的调度器,当然使用起来也相对麻烦;
2. java.util包里的Timer,它也可以实现定时任务但是功能过于单一所有使用很少。
3. 就是我们今天要介绍的Spring自带的定时任务Schedule,其实可以把它看作是一个简化版的,轻量级的Quartz,使用起来也相对方便很多。
二、实现定时任务
1. 创建定时任务
- importorg.slf4j.Logger;
- importorg.slf4j.LoggerFactory;
- importorg.springframework.scheduling.annotation.Scheduled;
- importorg.springframework.stereotype.Component;
- /**
- *Description:构建执行定时任务
- *Designer:jack
- *Date:2017/8/10
- *Version:1.0.0
- */
- @Component
- publicclassScheduledTasks{
- privateLoggerlogger=LoggerFactory.getLogger(ScheduledTasks.class);
- privateintfixedDelayCount=1;
- privateintfixedRateCount=1;
- privateintinitialDelayCount=1;
- privateintcronCount=1;
- @Scheduled(fixedDelay=5000)//fixedDelay=5000表示当前方法执行完毕5000ms后,Springscheduling会再次调用该方法
- publicvoidtestFixDelay(){
- logger.info("===fixedDelay:第{}次执行方法",fixedDelayCount++);
- }
- @Scheduled(fixedRate=5000)//fixedRate=5000表示当前方法开始执行5000ms后,Springscheduling会再次调用该方法
- publicvoidtestFixedRate(){
- logger.info("===fixedRate:第{}次执行方法",fixedRateCount++);
- }
- @Scheduled(initialDelay=1000,fixedRate=5000)//initialDelay=1000表示延迟1000ms执行***次任务
- publicvoidtestInitialDelay(){
- logger.info("===initialDelay:第{}次执行方法",initialDelayCount++);
- }
- @Scheduled(cron="00/1***?")//cron接受cron表达式,根据cron表达式确定定时规则
- publicvoidtestCron(){
- logger.info("===initialDelay:第{}次执行方法",cronCount++);
- }
- }
我们使用@Scheduled来创建定时任务 这个注解用来标注一个定时任务方法。通过看@Scheduled源码可以看出它支持多种参数:
(1)cron:cron表达式,指定任务在特定时间执行;
(2)fixedDelay:表示上一次任务执行完成后多久再次执行,参数类型为long,单位ms;
(3)fixedDelayString:与fixedDelay含义一样,只是参数类型变为String;
(4)fixedRate:表示按一定的频率执行任务,参数类型为long,单位ms;
(5)fixedRateString: 与fixedRate的含义一样,只是将参数类型变为String;
(6)initialDelay:表示延迟多久再***次执行任务,参数类型为long,单位ms;
(7)initialDelayString:与initialDelay的含义一样,只是将参数类型变为String;
(8)zone:时区,默认为当前时区,一般没有用到。
2.开启定时任务
- importorg.springframework.boot.SpringApplication;
- importorg.springframework.boot.autoconfigure.SpringBootApplication;
- importorg.springframework.scheduling.annotation.EnableScheduling;
- /**
- *Description:启动类
- *Designer:jack
- *Date:2017/8/10
- *Version:1.0.0
- */
- @SpringBootApplication
- @EnableScheduling
- publicclassApplication{
- publicstaticvoidmain(String[]args){
- SpringApplication.run(Application.class,args);
- }
- }
注意这里的 @EnableScheduling 注解,它的作用是发现注解@Scheduled的任务并由后台执行。没有它的话将无法执行定时任务。
引用官方文档
©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经