搭建调度中心xxl-job-admin
下载调度中心项目
gitee
github
注: 下载项目的版本应与集成项目pom引用xxl-job版本号对应上。
执行初始化数据库SQL
sql路径: doc/db/tables_xxl_job.sql
XXL-JOB调度模块基于自研调度组件并支持集群部署,调度数据库表说明如下:
xxl_job_lock:任务调度锁表;
xxl_job_group:执行器信息表,维护任务执行器信息;
xxl_job_info:调度扩展信息表,用于保存XXL-JOB调度任务的扩展信息,如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等;
xxl_job_log:调度日志表,用于保存XXL-JOB任务调度的历史信息,如调度结果、执行结果、调度入参、调度机器和执行器等等;
xxl_job_log_report:调度日志报表,用户存储XXL-JOB任务调度日志的报表,调度中心报表功能页面会用到;
xxl_job_logglue:任务GLUE日志,用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息; xxl_job_user:系统用户表;
调整项目参数
配置文件路径: xxl-job-admin/src/main/resources/application.properties
防止端口号冲突修改端口号
修改数据库相关配置
注: 配置初始sql相关数据库的配置
修改邮箱相关配置
注: 可配可不配
accessToken
注: accessToken的值需要和集成项目的执行器中配置的值一致
启动项目
通过Application运行程序,也可以打包后通过jar命令启动
启动jar包项目命令
java -jar jar包名
测试项目是否成功
访问地址
http://ip:port/xxl-job-admin
注: ip地址:项目服务启动路径,如本地启动路径:http://localhost:8080/xxl-job-admin。
其端口号和路径
账号密码
默认: 账号:admin 密码:123456
注: 忘记密码可以去数据库修改,使用md5加密后填充
测试成功
项目集成
添加xxl-job的依赖
pom.xml文件引用
<!-- Xxl-Job -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>对应搭建调用中心对应的版本</version>
</dependency>
集成配置
### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=default_token
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-forlan
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
xxl.job.executor.address=
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=D:/data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30
初始化配置
初始化并配置xxl-job的执行器,将其集成到Spring Boot应用中
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@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() {
logger.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;
}
}
创建执行器
登录调度中心,选择执行器管理菜单,新增一个执行器
AppName: 对应项目集成xxl-job配置xxl.job.executor.appname的value
名称: 由用户自行添加
注册方式: 自动注册
机器地址: 注册方式选择自动注册该内容不用填
创建定时任务
BEAN模式(方法形式)
需要新增XxlJobHandler类,每个任务需要开发一个方法,并添加"@XxlJob"注解,如下
package cn.forlan.job;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;
@Component
public class MyXxlJobHandler {
@XxlJob("myXxlJobHandler")
public void execute() throws Exception {
// 任务执行逻辑
System.out.println("定时任务已调用");
XxlJobHelper.log("定时任务已调用");
}
}
填写说明:
执行器: 选择我们之前创建的执行器即可
任务描述: 自行添加即可
路由策略: 执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等,自己看情况选择即可
Cron: cron表达式,执行间隔
运行模式: BEAN
JobHandler: 填写定时任务@XxlJob的value
阻塞处理策略: 调度过于密集执行器来不及处理时的处理策略,策略包括:单机串行(默认)、丢弃后续调度、覆盖之前调度;
报警邮件: 如果需要告警的话,可以配上邮箱,任务失败时会触发
负责人: 自行添加即可
其他参数自行添加
GLUE(Java)模式
后续补充
测试
然后查看日志是否成功
总结
xxl-job包括调度中心和执行器两个主要部分,调度中心负责管理调度信息,按照调度配置发出调度请求,执行器负责接收调度请求并执行对应的JobHandler中业务逻辑。通过这种方式,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性。
大概原理如下:
任务注册: 任务的注册是通过在xxl-job-admin管理平台上配置任务信息,包括任务名称、执行器地址、任务参数等。
任务调度: xxl-job-admin管理平台会根据任务的配置信息,将任务调度信息写入数据库。调度中心会定时扫描数据库,根据任务的调度策略和触发器条件,选择合适的执行器节点进行任务调度。
任务执行: 执行器节点会定时向调度中心发送心跳请求,获取待执行的任务。调度中心根据任务的调度策略,将任务分配给执行器节点。执行器节点接收到任务后,根据任务的类型和参数进行任务的执行。
任务监控: xxl-job提供了任务监控功能,可以查看任务的执行情况、日志和统计信息。执行器节点会将任务的执行情况和日志信息上报给调度中心,调度中心将这些信息存储在数据库中,供用户查看。
通过以上功能,xxl-job实现了分布式任务的调度和执行,提供了可靠、高效的任务调度解决方案。