一:单体定时任务

jdk 原生有 Timer ScheduledExecutorService 实现定时任务, Timer 是单线程跑定时任务,ScheduledExecutorService 是多线程跑.

SpringTask 默认集合在SpringBoot中,支持注解cron 表达式的方法运行定时任务

  1. //在配置类中添加一个@EnableScheduling注解即可开启SpringTask的定时任务能力
  2. @Configuration
  3. @EnableScheduling
  4. public class SpringTaskConfig {
  5. }
  6. //@Schedule 注解与表达式来决定什么时间执行一次
  7. @Component
  8. public class DemoTask {
  9. private Logger LOGGER = LoggerFactory.getLogger(DemoTask.class);
  10. /**
  11. * cron表达式:Seconds Minutes Hours DayofMonth Month DayofWeek [Year]
  12. * 每10分钟执行一次
  13. */
  14. @Scheduled(cron = "0 0/10 * ? * ?")
  15. private void action() {
  16. LOGGER.info("定时任务执行");
  17. }
  18. }

二:分布式定时框架的结构

系统服务一般都是集群的, 单体的话需要部署在每个需要的服务上,我们有时候需要将所有定时任务部署到一台机器上
分布式定时任务框架将定时任务抽象成三个角色 : 调度器 执行器 任务,市面上类似的定时框架都有类似的角色定位
image.png
根据调度器执行器 的关系,又分成 中心化 去中心化

  • 所谓的「中心化」指的是:调度器和执行器分离,调度器统一进行调度,通知执行器去执行定时任务
  • 所谓的「去中心化」指的是:调度器和执行器耦合,自己调度自己执行

y总这篇文章写 的更详细

三: 整合使用

xxx-job官网文档