
gaojinxi123/xxl-job该镜像提供分布式环境下的定时任务调度解决方案,旨在解决单点部署定时任务的可靠性问题,支持多节点协同执行定时任务,确保任务在分布式系统中高效、稳定、可靠地运行。通过分布式架构设计,可避免单点故障导致的任务丢失,适用于各类需要定时执行任务的业务场景。
bashdocker run -d \ --name distributed-task-node \ -e SPRING_DATASOURCE_URL=jdbc:mysql://mysql-host:3306/task_db?useSSL=false \ -e SPRING_DATASOURCE_USERNAME=task_user \ -e SPRING_DATASOURCE_PASSWORD=task_password \ -e TASK_NODE_NAME=node-01 \ -e TASK_REGISTRY_TYPE=redis \ -e REDIS_HOST=redis-host \ -e REDIS_PORT=6379 \ -p 8080:8080 \ --restart=always \ distributed-task:latest
yamlversion: '3.8' services: task-node-1: image: distributed-task:latest container_name: task-node-1 environment: - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/task_db?useSSL=false&serverTimezone=UTC - SPRING_DATASOURCE_USERNAME=root - SPRING_DATASOURCE_PASSWORD=root_password - TASK_NODE_NAME=task-node-1 - TASK_REGISTRY_TYPE=mysql - TASK_LOG_LEVEL=INFO - TASK_RETRY_MAX=3 - TASK_RETRY_INTERVAL=60 ports: - "8080:8080" depends_on: - mysql restart: always task-node-2: image: distributed-task:latest container_name: task-node-2 environment: - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/task_db?useSSL=false&serverTimezone=UTC - SPRING_DATASOURCE_USERNAME=root - SPRING_DATASOURCE_PASSWORD=root_password - TASK_NODE_NAME=task-node-2 - TASK_REGISTRY_TYPE=mysql - TASK_LOG_LEVEL=INFO ports: - "8081:8080" depends_on: - mysql restart: always mysql: image: mysql:8.0 container_name: task-mysql environment: - MYSQL_ROOT_PASSWORD=root_password - MYSQL_DATABASE=task_db volumes: - mysql-data:/var/lib/mysql ports: - "3306:3306" healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] interval: 10s timeout: 5s retries: 5 volumes: mysql-data:
| 环境变量键 | 描述 | 默认值 | 是否必填 |
|---|---|---|---|
| SPRING_DATASOURCE_URL | 数据库连接URL(支持MySQL/PostgreSQL) | - | 是 |
| SPRING_DATASOURCE_USERNAME | 数据库用户名 | - | 是 |
| SPRING_DATASOURCE_PASSWORD | 数据库密码 | - | 是 |
| TASK_NODE_NAME | 当前节点唯一标识(分布式环境需确保不同节点名称唯一) | node-${随机字符串} | 否 |
| TASK_REGISTRY_TYPE | 注册中心类型(支持mysql/redis/zookeeper) | mysql | 否 |
| TASK_LOG_LEVEL | 日志输出级别(DEBUG/INFO/WARN/ERROR) | INFO | 否 |
| TASK_RETRY_MAX | 任务失败后最大重试次数 | 3 | 否 |
| TASK_RETRY_INTERVAL | 任务重试间隔(单位:秒) | 60 | 否 |
| TASK_THREAD_POOL_SIZE | 任务执行线程池大小 | 10 | 否 |
| REDIS_HOST | Redis注册中心主机地址(当TASK_REGISTRY_TYPE=redis时必填) | - | 条件必填 |
| REDIS_PORT | Redis注册中心端口 | 6379 | 否 |
| ZOOKEEPER_HOSTS | Zookeeper注册中心地址(当TASK_REGISTRY_TYPE=zookeeper时必填,格式:host1:port1,host2:port2) | - | 条件必填 |
任务需通过配置文件或API注册,支持JSON格式定义,示例如下:
json{ "taskId": "user-stat-report", "taskName": "用户统计报表生成", "cronExpression": "0 0 2 * * ?", // 每日凌晨2点执行 "executorClass": "com.example.tasks.UserStatReportTask", // 任务执行类全路径 "taskParams": "{\"reportType\":\"daily\",\"limit\":1000}", // 任务参数(JSON字符串) "timeout": 1800, // 任务超时时间(单位:秒) "shardingStrategy": "AUTO", // 分片策略(AUTO/ROUND_ROBIN/指定分片键) "maxConcurrent": 3, // 最大并发执行数 "failStrategy": "RETRY" // 失败策略(RETRY/ALERT/IGNORE) }
自定义任务执行类需实现TaskExecutor接口,并重写execute方法,示例:
javapublic class UserStatReportTask implements TaskExecutor { @Override public TaskResult execute(TaskParam param) { // 任务执行逻辑 String reportType = param.getParam("reportType"); int limit = Integer.parseInt(param.getParam("limit")); // ...业务处理... return TaskResult.success("报表生成成功,文件路径:/reports/" + reportType + "_" + System.currentTimeMillis() + ".csv"); } }
INIT_DB=true触发)TASK_NODE_NAME必须唯一,否则会导致任务调度异常TASK_THREAD_POOL_SIZE),避免资源竞争





manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务