XXL-Job是一个轻量级、高性能的分布式任务调度平台,适用于大并发、高可用性的场景。本文将带你一步步使用Docker安装XXL-Job,让你轻松上手这款强大的任务调度工具。
一、准备工作
1. 下载源码
首先,我们需要从Gitee仓库下载XXL-Job的源码:
http://gitee.com/xuxueli0323/xxl-job
下载完成后,解压文件,找到数据库初始化SQL脚本tables_xxl_job.sql
。
2. 部署MySQL
本文中我的MySQL已经部署在Docker容器中。如果尚未部署,请先创建并运行MySQL容器。
二、初始化数据库
将数据库初始化SQL脚本tables_xxl_job.sql
上传到服务器。
在宿主机上使用 cat
命令将 SQL 文件的内容通过管道传递给 docker exec
,导入MySQL数据库:
cat ./tables_xxl_job.sql | docker exec -i mysql mysql -u root -pxxxx
其中,xxxx
为你的MySQL root用户密码。
导入成功后,可以使用以下命令查看数据库是否创建完成:
docker exec -i mysql mysql -u root -p -e "SHOW DATABASES LIKE 'xxl_job';"
三、下载并运行XXL-Job镜像
1. 下载镜像
使用以下命令下载XXL-Job的Docker镜像:
docker pull xuxueli/xxl-job-admin:2.4.1
2. 创建容器并运行
首先,创建一个数据目录:
mkdir /data/xxljob
然后,运行以下命令创建并运行XXL-Job容器:
docker run \
-itd \
-e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.101.101:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 \
--spring.datasource.username=root \
--spring.datasource.password=xxxx" \
-p 52013:8080 \
-v /data/xxljob:/data/applogs \
--name xxl-job \
xuxueli/xxl-job-admin:2.4.1
其中,192.168.101.101
为你的MySQL地址,3306
为MySQL端口,root
和xxxx
分别为MySQL的用户名和密码。
四、访问XXL-Job管理界面
打开浏览器,访问以下地址:
http://192.168.101.101:52013/xxl-job-admin
默认登录账号为“admin”,密码为“123456”。登录后,我们将看到以下界面:
五、集成SpringBoot
接下来,我们将XXL-Job集成到SpringBoot项目中,实现定时任务的调度。
1. 添加依赖
在pom.xml
中添加XXL-Job的依赖:
<!-- https://repo1.maven.org/maven2/com/xuxueli/xxl-job-core/ -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.1</version>
</dependency>
2. 配置文件
在application.yml
中配置XXL-Job的相关参数:
查看代码
xxl:
job:
admin:
addresses: http://192.168.101.101:52013/xxl-job-admin
executor:
appname: executor-1
port: 52014
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: 7
accessToken: default_token
3. 属性类和配置类
创建一个 Java 属性类XxlJobProperties
类,读取 application.yml
中的配置
查看代码
@Configuration
@Data
public class XxlJobProperties {
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.appname}")
private String appname;
// @Value("${xxl.job.executor.address}")
// private String address;
// @Value("${xxl.job.executor.ip}")
// private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
}
创建一个 Java 配置类,读取属性类中的值,构造 XxlJobExecutor
执行器。
查看代码
@Configuration
@RequiredArgsConstructor
@EnableScheduling
public class XxlJobConfig {
private final XxlJobProperties xxlJobProperties;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdminAddresses());
xxlJobSpringExecutor.setAppname(xxlJobProperties.getAppname());
// xxlJobSpringExecutor.setAddress(address);
// xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(xxlJobProperties.getPort());
xxlJobSpringExecutor.setAccessToken(xxlJobProperties.getAccessToken());
xxlJobSpringExecutor.setLogPath(xxlJobProperties.getLogPath());
xxlJobSpringExecutor.setLogRetentionDays(xxlJobProperties.getLogRetentionDays());
return xxlJobSpringExecutor;
}
}
4. 编写任务类
创建一个任务类,每个任务只需要开发一个方法,并添加 @XxlJob
注解。
@Component
public class XxlJobHandler {
@XxlJob(value = "xxlJobCengxuyuan")
public ReturnT<String> xxlJobCengxuyuan(String... params) {
System.out.println("调度执行成功");
return ReturnT.SUCCESS;
}
}
六、任务调度与管理
1. 添加执行器
在XXL-Job管理界面的“执行器管理”中添加一个新的执行器。
- AppName:填写你的SpringBoot项目配置的
xxl.job.executor.appname
。 - 自动注册:勾选后保存。
启动我们的SpringBoot测试项目,可以看到OnLine机器地址。
2. 添加任务
在“任务管理”中添加一个新的任务。
- JobHandler:填写java任务类中的
@XxlJob
注解后面的值。 - 配置任务的其他参数,如Cron表达式,然后保存。
3. 启动任务
在任务列表中,找到新添加的任务,点击“操作”下的“启动”,任务将开始按配置的Cron表达式执行。
4. 查看调度日志
在“调度日志”中,可以查看每次任务调度的结果和执行情况。
SpringBoot项目中的任务也真正执行起来了。
参考链接