🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 简介 Quartz is a richly featured, open source job scheduling library that can be integrated within virtually any Java application - from the smallest stand-alone application to the largest e-commerce system. ## 几种任务调度 * Timer,简单无门槛,一般也没人用。 * spring `@Scheduled`注解,一般集成于项目中,小任务很方便。 * 开源工具 Quartz,分布式集群开源工具,以下两个分布式任务应该都是基于Quartz实现的,可以说是中小型公司必选,当然也视自身需求而定。 * 分布式任务 XXL-JOB,是一个轻量级分布式任务调度框架,支持通过 Web 页面对任务进行 CRUD 操作,支持动态修改任务状态、暂停/恢复任务,以及终止运行中任务,支持在线配置调度任务入参和在线查看调度结果。 * 分布式任务 Elastic-Job,是一个分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成。定位为轻量级无中心化解决方案,使用 jar 包的形式提供分布式任务的协调服务。支持分布式调度协调、弹性扩容缩容、失效转移、错过执行作业重触发、并行调度、自诊。 * 分布式任务 Saturn,Saturn是唯品会在github开源的一款分布式任务调度产品。它是基于当当elastic-job来开发的,其上完善了一些功能和添加了一些新的feature。目前在github上开源大半年,470个star。Saturn的任务可以用多种语言开发比如python、Go、Shell、Java、Php。其在唯品会内部已经发部署350+个节点,每天任务调度4000多万次。同时,管理和统计也是它的亮点。 ## 基本概念 1. Scheduler – 调度器,任务调度的主 API。 2. Job – 由调度器调度的任务需要实现的接口。 3. JobDetail – 用于定义任务的实例。 4. Trigger – 用于定义需要执行的任务和任务的执行时间。 5. JobBuilder – 用于定义/创建 JobDetail 实例。 6. TriggerBuilder – 用于定义/创建 Trigger 对象。 为什么需要 Job 和 Trigger?有些任务调度方案没有分离 job 和 trigger,为什么 Quartz 需要分别定义 Job 和 Trigger 呢?主要基于以下考虑。 多个 Job 可以保存到同一个 Trigger,多个 Trigger 也可以关联到相同的 Job。这种松耦合的设计的另外一个好处是可以在 trigger 过期后配置任务到调度器中,方便以后重新开始任务,而不用再次定义任务。也允许在不更换任务的情况下更改和替换 Trigger。 ### 核心元素关系 - 一个job可以关联多个trigger,但是一个trigger只能关联一个job。 - trigger、job、jobDetail为元数据,Scheduler为实际进行的调度控制器;