开放代码社区 › disjob

disjob

基础设施与运维Java

一款分布式的任务调度与分布式计算框架 简体中文 English 一款分布式的任务调度与分布式计算框架,除了具备常规的任务调度功能外,还提供暂停/取消运行中的任务、恢复执行已暂停的任务、任务分片、失败重试、广播任务、任务依赖、工作流任务(DAG)、管理器与执行器分离部署、Web管理后台等能力。 轻量级,简单易用,特别适合长任务的执行。功能强大,稳定可靠,历经生产检验。

AI/机器学习Web后端前端工具数据库
作者:用户6868语言:Java更新:2026-10-27
仓库地址
https://gitee.com/dromara/disjob.git

前往原仓库

README

<p align="center">
  <img src="https://web-code-img.oss-cn-shanghai.aliyuncs.com/readme/1056a5dfb9f7bbfb89c866bf.png" width="160" alt="Logo" />
</p>
<p align="center">
  <strong>一款分布式的任务调度与分布式计算框架</strong>
</p>
<p align="center">
  <a href="https://www.apache.org/licenses/LICENSE-2.0.html"><img src="https://img.shields.io/badge/license-Apache--2.0-green.svg?logo=apache" alt="License"></a>
  <a href="https://www.oracle.com/java/technologies/downloads/#java8"><img src="https://img.shields.io/badge/JDK-8+-green.svg?logo=oracle&logoColor=crimson" alt="JDK8+"></a>
  <a href="https://central.sonatype.com/namespace/cn.ponfee"><img src="https://img.shields.io/badge/maven--central-2.2.5-orange.svg?style=plastic&logo=apachemaven" alt="Maven Central"></a>
  <a href="https://github.com/dromara/disjob/actions"><img src="https://github.com/dromara/disjob/workflows/build/badge.svg" alt="Build status"></a>
  <a href="http://ponfee.cn:8000/"><img src="https://img.shields.io/badge/online-Demo-blue.svg?logo=airplayvideo&logoColor=green" alt="Demo"></a>
</p>
<p align="center">
  在线演示:<a href="http://ponfee.cn:8000/">http://ponfee.cn:8000/</a>
</p>

---

**`简体中文`** | [English](https://gitee.com/dromara/disjob/blob/2.2.x/README.en.md)

一款分布式的任务调度与分布式计算框架,除了具备常规的任务调度功能外,还提供暂停/取消运行中的任务、恢复执行已暂停的任务、任务分片、失败重试、广播任务、任务依赖、工作流任务(DAG)、管理器与执行器分离部署、Web管理后台等能力。

轻量级,简单易用,特别适合长任务的执行。功能强大,稳定可靠,历经生产检验。

## Architecture

- 整体流程

![Architecture](https://web-code-img.oss-cn-shanghai.aliyuncs.com/readme/f0d23d782b7a717546fb3cb8.jpg)

- 代码结构

```text
disjob                                        # 主项目①pom.xml
├── disjob-admin                              # 管理后台项目②pom.xml(基于Ruoyi框架二次开发)
├── disjob-alert                              # 告警模块
│   ├── disjob-alert-api                      # 告警的抽象接口层
│   ├── disjob-alert-email                    # 邮件告警
│   ├── disjob-alert-im                       # 即时通讯告警(钉钉、企业微信、飞书等)
│   └── disjob-alert-sms                      # 短信告警
├── disjob-bom                                # Maven项目bom模块
├── disjob-common                             # 公共的工具类模块
├── disjob-core                               # 任务调度相关的核心类(如枚举类、接口定义、接口参数等)
├── disjob-id                                 # 分布式ID生成模块
├── disjob-registry                           # Server(Supervisor & Worker)注册模块
│   ├── disjob-registry-api                   # Server注册中心的抽象接口层
│   ├── disjob-registry-consul                # Server注册中心:Consul实现
│   ├── disjob-registry-database              # Server注册中心:Database实现
│   ├── disjob-registry-etcd                  # Server注册中心:Etcd实现
│   ├── disjob-registry-nacos                 # Server注册中心:Nacos实现
│   ├── disjob-registry-redis                 # Server注册中心:Redis实现
│   └── disjob-registry-zookeeper             # Server注册中心:Zookeeper实现
├── disjob-reports                            # 聚合各个模块的测试覆盖率报告
├── disjob-samples                            # Samples项目③pom.xml
│   ├── disjob-samples-conf                   # Samples使用到的配置文件
│   ├── disjob-samples-frameless-worker       # Worker单独部署的范例(普通Java-main应用)
│   ├── disjob-samples-springboot-merged      # Supervisor与Worker合并部署的范例(Spring-boot应用)
│   ├── disjob-samples-springboot-supervisor  # Supervisor单独部署的范例(Spring-boot应用)
│   └── disjob-samples-springboot-worker      # Worker单独部署的范例(Spring-boot应用)
├── disjob-supervisor                         # Supervisor代码
├── disjob-test                               # 用于辅助测试
└── disjob-worker                             # Worker代码
```

## Features

- 分为管理器(Supervisor)和执行器(Worker)两种角色,Supervisor与Worker可分离部署
- Supervisor与Worker通过注册中心相互发现,支持的注册中心有:Database、Redis、Consul、Nacos、Zookeeper、Etcd
- Supervisor负责生成任务,把任务派发给Worker执行
- 需要指定Job的分组(group),Job的任务只会派发给指定组的Worker执行
- 提供任务分片的能力,重写拆分方法[JobSplitter#split](https://gitee.com/dromara/disjob/blob/2.2.x/disjob-worker/src/main/java/cn/ponfee/disjob/worker/executor/JobSplitter.java)即可拆分为多个任务,实现分布式任务及并行执行
- 支持暂停和取消运行中的任务,已暂停的任务可恢复继续执行,执行失败的任务支持重试
- 支持任务保存(Savepoint)其执行状态,让手动或异常暂停的任务能从上一次的执行状态中恢复继续执行
- 任务在执行时若抛出[PauseTaskException](https://gitee.com/dromara/disjob/blob/2.2.x/disjob-worker/src/main/java/cn/ponfee/disjob/worker/exception/PauseTaskException.java),会暂停对应实例下的全部任务(包括分派到其它worker机器的任务)
- 支持广播任务,广播任务会派发给group下的所有worker执行
- 支持Job间的父子依赖,多个Job配置好依赖关系后便会按既定的依赖顺序依次执行
- 支持DAG工作流,可把`jobExecutor`配置为复杂的DAG表达式,如:A->B,C,(D->E)->F,G->H
- 支持执行中的Task在Worker(服务)发布完成后自动恢复继续执行(见`shutdown_strategy`配置)
- 提供Web管理后台,通过用户界面进行作业配置,任务监控等

## Comparison

|                | **Quartz** | **Elastic-Job** |     **Xxl-Job**      |               **Disjob**               |
| -------------- | ---------- |-----------------|----------------------|----------------------------------------|
|  **触发类型**   |    Cron    |     Cron        | Cron、固定频率、父子依赖 | Cron、指定时间、固定频率、固定延时、父子依赖 |
|  **任务编排**   |     无     |     无           |     无                | DAG表达式                              |
|  **任务分片**   |     无     |    静态分片       |     广播任务           | 广播任务、动态分片                       |
|  **停止与恢复**  |    无      |     无          | 终止运行中的任务         | 暂停执行中的任务、恢复执行已暂停的任务      |
|  **保存执行数据**  |     无     |     无           |     无                | 有                                  |
|  **失败重试**   |     无     |    失效转移       |     有                | 有                                     |
|  **后台管理**   |     无     |      有          |     有                | 有                                     |
|  **监控告警**   |     无     |      邮件        |     邮件               | 邮件、钉钉、企业微信、飞书、短信等          |

## [Download From Maven Central](https://central.sonatype.com/namespace/cn.ponfee)

```xml
<dependency>
  <groupId>cn.ponfee</groupId>
  <artifactId>disjob-{xxx}</artifactId>
  <version>2.2.5</version>
</dependency>
```

## Build From Source

```shell
./mvnw clean install -DskipTests -Dcheckstyle.skip=true -Dmaven.javadoc.skip=true -U
```

## Versions

| Disjob version | Git branch  | **Spring-boot version** | **JDK version** |
|----------------|-------------|-------------------------|-----------------|
| **2.2.5**      | 2.2.x       | 2.7.18