XXL-JOB是一个分布式任务调度平台。
使用时,分为调度中心(单独一个web项目)和执行器(任意Spring boot的Java服务)。
调度中心有web界面,用来定义任务,查看日志。
调度中心的部署:
1. 下载xxl-job源码
https://github.com/xuxueli/xxl-job/tags
选择合适的稳定版本(如 2.4.2)
2. 解压并启动
2.1 解压下载的源码
2.2 在数据库中新建名为xxl_job数据库,然后在该数据库中执行~\doc\dbtables_xxl_job.sql文件,用于初始化数据
2.3 用idea打开该项目,然后根据需要修改~\xxl-job-admin\src\main\resources\application.properties配置文件(基本只用改数据库的密码就行)
2.4 启动 XxlJobAdminApplication 项目,然后访问 http://192.168.0.104:8080/xxl-job-admin/toLogin (默认密码:admin/123456)
2.5 配置你的执行器,然后根据需要配置任务即可
任务配置界面如下(一般如图中配置就行):
执行器的集成:
1. 在项目中添加依赖(注意依赖的版本需要和调度中心的版本一致)
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.2</version><!-- 这个版本,要和调度中心版本一致 -->
</dependency>
2. 在项目中新建配置类
2.1 新建XxlJobConfig
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
@Configuration
@Slf4j
public class XxlJobConfig {
@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;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
log.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
// xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logpath);
xxlJobSpringExecutor.setLogRetentionDays(logretentiondays);
return xxlJobSpringExecutor;
}
}
2.2 在配置文件中添加相应配置信息
# Spring boot的web服务的端口
server.port=8081
# 调度中心的地址
xxl.job.admin.addresses=http://192.168.0.104:8080/xxl-job-admin
# 执行器自己的名字
xxl.job.executor.appname=my-executor-test
# 日志路径(执行器中,XxlJobHelper.log()打印的日志存放地址)
xxl.job.executor.logpath=D:/lll/xxljob
# 日志保留天数
xxl.job.executor.logretentiondays=30
# 通讯token(调度中心~\xxl-job-admin\src\main\resources\application.properties配置文件中xxl.job.accessToken参数的值)
xxl.job.accessToken=default_token
# 回调地址,相当于告诉调度中心,自己的地址(这个和 xxl.job.executor.port + xxl.job.executor.ip 是替换关系)
#xxl.job.executor.address=http://192.168.0.104:9999
# 执行器端口(非项目端口)
xxl.job.executor.port=9999
# 执行器ip
xxl.job.executor.ip=192.168.0.104
3. 定义BEAN类型的定时任务(xxl-jobd的任务类型分为BEAN和GLUE,如果是GLUE类型,执行器则无需额外代码,BEAN类型则需要提前定义一个对应的方法)
@XxlJob("demoJobHandler") // 这个值必须与任务管理中的 JobHandler 一致
public void demoJobHandler() throws Exception {
XxlJobHelper.log("【DEBUG】demoJobHandler 方法已进入!");
// 获取任务参数
String jobParam = XxlJobHelper.getJobParam();
JSONObject jsonObject = JSONObject.parseObject(jobParam);
// 打印日志
XxlJobHelper.log("接收到的任务参数1: {}", jobParam);
log.info("接收到的任务参数2: {}", jobParam);
log.info("接收到的任务参数3: {}", jsonObject.toJSONString());
Thread.sleep(3 * 1000);// 模拟耗时
log.info("======end=====");
}