Docker 安装 XXL-JOB

前言

初始化数据库

在 MySQL 执行 XXL-JOB GitHub 仓库中的 SQL 初始化脚本,初始化完成后一共有 8 张表

表名称描述
xxl_job_group 执行器信息表,用于维护任务执行器的信息
xxl_job_info 调度扩展信息表,用于存储调度任务的扩展信息,比如任务分组、任务名、机器的地址等
xxl_job_lock 任务调度锁表
xxl_job_log 日志表,用于存储任务调度的历史信息,例如调度结果、执行结果、调度入参等
xxl_job_log_report 日志报表,用于存储任务调度的日志报表,会在调度中心里的报表功能里使用到
xxl_job_logglue 任务的 GLUE 日志,用于存储 GLUE 日志的更新历史变化,支持 GLUE 版本的回溯功能
xxl_job_registry 执行器的注册表,用在维护在线的执行器与调度中心的地址信息
xxl_job_user 系统的用户表,可以用表中默认的用户名与密码进行登录

XXL-JOB 安装

拉取镜像

1
2
3
4
5
# 最新版本
$ docker pull xuxueli/xxl-job-admin

# 或者指定版本号(推荐)
$ docker pull xuxueli/xxl-job-admin:2.3.1

启动容器

监听端口

XXL-JOB 启动后默认会监听 8080 端口,用于 Admin 的 HTTP 服务。

自定义参数

  • GitHub 仓库中的配置项参考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
  • 如需自定义 JVM 内存参数等配置,可通过 Docker 的 -e JAVA_OPTS 指定,参数格式 -e JAVA_OPTS="-Xmx512m"
  • 如需自定义 MySQL 等配置,可通过 Docker 的 -e PARAMS 指定,参数格式 -e PARAMS="--key=value --key2=value2"

Docker 启动

1
2
3
4
5
docker run -e PARAMS="--server.port=8080 --spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=root --xxl.job.accessToken=default_token" \
-p 8080:8080 \
-v /tmp/logs:/data/applogs \
--name xxl-job-admin \
-d xuxueli/xxl-job-admin:2.3.1

请自行更改 MySQL 数据库的连接信息,例如 IP、用户名和密码。

Docker-Compose 启动

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3.5'

services:
xxl-job:
image: xuxueli/xxl-job-admin:2.3.1
container_name: xxl-job-admin
restart: always
volumes:
- /tmp/logs:/data/applogs
environment:
- "PARAMS=--server.port=8080 --spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=root --xxl.job.accessToken=default_token"
ports:
- 8080:8080

请自行更改 MySQL 数据库的连接信息,例如 IP、用户名和密码。

登录控制台

浏览器访问 http://127.0.0.1:8080/xxl-job-admin,默认登录的账号密码是 admin / 123456

访问令牌配置

为了提升系统的安全性,可要求任务调度中心和执行器进行安全性校验,双方的 AccessToken 匹配才允许通讯。任务调度中心和执行器,均可通过配置项 xxl.job.accessToken 进行 AccessToken 的设置。

  • 启动 Docker 容器时,可以通过 -e PARAMS 指定 AccessToken
1
2
3
4
5
docker run -e PARAMS="--server.port=8080 --spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=root --xxl.job.accessToken=default_token" \
-p 8080:8080 \
-v /tmp/logs:/data/applogs \
--name xxl-job-admin \
-d xuxueli/xxl-job-admin:2.3.1
  • 在 SpringBoot 项目中,可以使用以下内容配置执行器的 AccessToken
1
2
3
4
5
xxl:
job:
accessToken: default_token
admin:
addresses: http://127.0.0.1:8080/xxl-job-admin

提示,如果任务调度中心和执行器要实现正常通讯,只有两种设置

  • 第一种:任务调度中心和执行器,设置了相同的 AccessToken
  • 第二种:任务调度中心和执行器,均不设置 AccessToken,即关闭安全性校验。
  • 特别注意:XXL-JOB 从 v.2.3.1 版本开始,调度通讯默认启用 AccessToken,且默认的 AccessTokendefault_token

更改登录密码

XXL-JOB 的用户密码采用 MD5 算法 32 位小写加密。由于 MD5 是摘要算法,不可逆向的,每次登录时需要将密码通过相同的 MD5 算法加密后对比数据库是否一致,所以想修改密码只能修改数据库表的字段值。使用下述 Java 代码将新密码通过 MD5 算法加密,然后更改到数据库的 xxl_job_user 表即可。

特别注意

如果修改的新密码在加密前长度超过 18 位,仍然会登录失败,原因是 XXL-JOB 的前端页面对输入框输入的密码做了截取,只保留了 18 位字符并传到后端,因此会导致输入正确的密码后仍然登录失败,因此新密码的最大长度只支持 18 位。

1
2
3
4
5
6
7
8
9
10
import org.springframework.util.DigestUtils;

public class PasswordEncoderUtil {

public static void main(String[] args) {
String password = DigestUtils.md5DigestAsHex("newPassword".getBytes());
System.out.println(password);
}

}

参考博客