在分布式系统架构中,定时任务调度是每个开发者都无法回避的基础设施需求。传统的手动部署方式不仅耗时耗力,更难以保证环境一致性,而容器化技术恰好能完美解决这些问题。本文将带你用Docker Compose实现XXL-Job调度中心的一键化部署,告别繁琐的环境配置和依赖管理。
XXL-Job作为一款轻量级分布式任务调度平台,其设计初衷就是简化定时任务的管理。但当它遇到Docker Compose时,两者的优势会产生奇妙的化学反应:
docker-compose up命令即可启动整个调度系统提示:相比单机部署,容器化方案特别适合需要频繁切换环境的开发场景,也更容易迁移到生产环境
确保你的开发机已经安装以下组件:
bash复制# 检查Docker版本
docker --version
# 检查Docker Compose版本
docker-compose --version
推荐使用以下版本或更高:
建议按如下结构组织项目文件:
code复制xxl-job-docker/
├── docker-compose.yml
├── mysql/
│ ├── conf/
│ ├── data/
│ └── init/
│ └── tables_xxl_job.sql
└── xxl-job-admin/
└── logs/
以下是完整的docker-compose.yml配置示例:
yaml复制version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: xxl-job-mysql
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: xxl_job
TZ: Asia/Shanghai
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/init:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
networks:
- xxl-job-net
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 10s
retries: 3
xxl-job-admin:
image: xuxueli/xxl-job-admin:2.3.0
container_name: xxl-job-admin
depends_on:
mysql:
condition: service_healthy
environment:
PARAMS: "--spring.datasource.url=jdbc:mysql://mysql:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=root123"
volumes:
- ./xxl-job-admin/logs:/data/applogs
ports:
- "8080:8080"
networks:
- xxl-job-net
restart: unless-stopped
networks:
xxl-job-net:
driver: bridge
关键配置说明:
| 配置项 | 说明 | 推荐值 |
|---|---|---|
| volumes | 数据持久化目录 | 建议挂载到宿主机特定目录 |
| networks | 自定义网络 | 确保容器间互通 |
| healthcheck | 服务健康检查 | 避免服务启动顺序问题 |
| restart | 重启策略 | 生产环境建议always |
将XXL-Job官方提供的SQL脚本保存到mysql/init/tables_xxl_job.sql,Compose启动时会自动执行。
sql复制-- 示例SQL片段
CREATE TABLE `xxl_job_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_group` int(11) NOT NULL COMMENT '执行器主键ID',
`job_desc` varchar(255) NOT NULL,
`add_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在mysql/conf/my.cnf中添加优化参数:
ini复制[mysqld]
default_authentication_plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=1000
bash复制# 后台启动
docker-compose up -d
# 查看日志
docker-compose logs -f
打开浏览器访问http://localhost:8080/xxl-job-admin,使用默认账号登录:
成功登录后应该能看到XXL-Job的管理界面,此时可以:
在docker-compose.yml中添加资源限制:
yaml复制xxl-job-admin:
deploy:
resources:
limits:
cpus: '1'
memory: 1G
reservations:
memory: 512M
要实现XXL-Job的高可用,可以考虑:
当遇到连接问题时,可以按以下步骤排查:
检查MySQL容器是否正常运行
bash复制docker exec -it xxl-job-mysql mysql -uroot -p
查看XXL-Job日志
bash复制docker logs xxl-job-admin
验证网络连通性
bash复制docker exec xxl-job-admin ping mysql
检查数据库表是否初始化成功
sql复制SHOW TABLES FROM xxl_job;
在实际项目中使用这套方案半年后,最深的体会是容器化部署极大简化了环境迁移的工作量。特别是在团队协作场景下,新成员只需获取Compose文件就能立即拥有完整的开发环境,再也不用为"在我机器上是好的"这类问题头疼。