SpringBoot定时任务及Cron表达式详解

讲解如何使用SpringBoot定时任务,并通过源码说明如何使用多线程处理各定时任务。 详细说明cron表达式用法。

讲解如何使用SpringBoot定时任务,并通过源码说明如何使用多线程处理各定时任务。 详细说明cron表达式用法。

SpringBoot定时任务及Cron表达式详解

摘要: 讲解如何使用SpringBoot定时任务,并通过源码说明如何使用多线程处理各定时任务。 详细说明cron表达式用法。

一、定时任务概述

后台项目开发中经常会用到定时任务,现在实现定时任务都方式也是多种多样。下面列举几种常见的定时任务实现方式:

1. Quartz:Quartz的使用相当广泛,它是一个功能强大的调度器,当然使用起来也相对麻烦;

2. java.util包里的Timer,它也可以实现定时任务但是功能过于单一所有使用很少。

3. 就是我们今天要介绍的Spring自带的定时任务Schedule,其实可以把它看作是一个简化版的,轻量级的Quartz,使用起来也相对方便很多。

二、实现定时任务

1. 创建定时任务

  1. importorg.slf4j.Logger;
  2. importorg.slf4j.LoggerFactory;
  3. importorg.springframework.scheduling.annotation.Scheduled;
  4. importorg.springframework.stereotype.Component;
  5. /**
  6. *Description:构建执行定时任务
  7. *Designer:jack
  8. *Date:2017/8/10
  9. *Version:1.0.0
  10. */
  11. @Component
  12. publicclassScheduledTasks{
  13. privateLoggerlogger=LoggerFactory.getLogger(ScheduledTasks.class);
  14. privateintfixedDelayCount=1;
  15. privateintfixedRateCount=1;
  16. privateintinitialDelayCount=1;
  17. privateintcronCount=1;
  18. @Scheduled(fixedDelay=5000)//fixedDelay=5000表示当前方法执行完毕5000ms后,Springscheduling会再次调用该方法
  19. publicvoidtestFixDelay(){
  20. logger.info("===fixedDelay:第{}次执行方法",fixedDelayCount++);
  21. }
  22. @Scheduled(fixedRate=5000)//fixedRate=5000表示当前方法开始执行5000ms后,Springscheduling会再次调用该方法
  23. publicvoidtestFixedRate(){
  24. logger.info("===fixedRate:第{}次执行方法",fixedRateCount++);
  25. }
  26. @Scheduled(initialDelay=1000,fixedRate=5000)//initialDelay=1000表示延迟1000ms执行***次任务
  27. publicvoidtestInitialDelay(){
  28. logger.info("===initialDelay:第{}次执行方法",initialDelayCount++);
  29. }
  30. @Scheduled(cron="00/1***?")//cron接受cron表达式,根据cron表达式确定定时规则
  31. publicvoidtestCron(){
  32. logger.info("===initialDelay:第{}次执行方法",cronCount++);
  33. }
  34. }

我们使用@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.开启定时任务

  1. importorg.springframework.boot.SpringApplication;
  2. importorg.springframework.boot.autoconfigure.SpringBootApplication;
  3. importorg.springframework.scheduling.annotation.EnableScheduling;
  4. /**
  5. *Description:启动类
  6. *Designer:jack
  7. *Date:2017/8/10
  8. *Version:1.0.0
  9. */
  10. @SpringBootApplication
  11. @EnableScheduling
  12. publicclassApplication{
  13. publicstaticvoidmain(String[]args){
  14. SpringApplication.run(Application.class,args);
  15. }
  16. }

注意这里的 @EnableScheduling 注解,它的作用是发现注解@Scheduled的任务并由后台执行。没有它的话将无法执行定时任务。

引用官方文档

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月5日 00:36
下一篇 2023年5月5日 00:36

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信