分布式调度XXL-JOB - 详解
1.概述
1.1、XXL-JOB介绍
XXL-Job:是大众点评的分布式任务调度平台,是一个轻量级分布式任务调度平台, 其核心设计目标是开发迅速、学习简单、轻量级、易扩展。
官网地址: 分布式任务调度平台XXL-JOB/
1.1.1 系统架构图

1.1.2 设计思想
将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。
将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。
因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;
2.快速入门
2.1、下载源码
2.1.1 源码下载地址:
github:https://github.com/xuxueli/xxl-job
gitee:https://gitee.com/xuxueli0323/xxl-job
2.2、初始化调度数据库
clone项目源码,获取 “调度数据库初始化SQL脚本” 并执行即可,“调度数据库初始化SQL脚本” 位置为:
/xxl-job/doc/db/tables_xxl_job.sql
2.3、maven 编译源码
解压源码,按照maven格式将源码导入IDE, 使用maven进行依赖引入即可,源码结构如下:

2.4、 配置部署调度中心
2.4.1 调度中心配置
修改xxl-job-admin项目的配置文件application.properties,把数据库账号密码配置上
### web
server.port=8088
server.servlet.context-path=/xxl-job-admin
### actuator
management.server.servlet.context-path=/actuator
management.health.mail.enabled=false
### resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/
### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########
### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-package=com.xxl.job.admin.core.model
### xxl-job, datasource
spring.datasource.url=jdbc:mysql://192.168.202.200:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=WolfCode_2017
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max-lifetime=900000
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000
### xxl-job, email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.from=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
### xxl-job, access token
xxl.job.accessToken=default_token
### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en")
xxl.job.i18n=zh_CN
## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100
### xxl-job, log retention days
xxl.job.logretentiondays=30
2.4.2 部署项目
运行XxlJobAdminApplication程序即可.
调度中心访问地址: http://localhost:8088/xxl-job-admin
默认登录账号 “admin/123456”, 登录后运行界面如下图所示。


至此“调度中心”项目已经部署成功。
2.5 配置部署执行器项目
2.5.1 添加Maven依赖
创建SpringBoot项目集成xxl-job并且添加如下依赖:
org.springframework.boot
spring-boot-dependencies
2.4.2
pom
import
org.projectlombok
lombok
org.mapstruct
mapstruct
1.4.2.Final
org.mapstruct
mapstruct-processor
1.4.2.Final
org.springframework.boot
spring-boot-starter-log4j2
2.4.2
com.alibaba
fastjson
1.2.24
com.google.guava
guava
19.0
org.apache.commons
commons-lang3
3.11
org.springframework.boot
spring-boot-starter-data-redis
logback-classic
ch.qos.logback
spring-boot-starter-logging
org.springframework.boot
com.fasterxml.jackson.core
jackson-databind
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
org.springframework.boot
spring-boot-starter-jdbc
com.alibaba
druid-spring-boot-starter
1.2.15
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.2.2
com.baomidou
mybatis-plus-boot-starter
3.5.1
com.xuxueli
xxl-job-core
2.3.1

2.5.2 执行器配置
在配置yaml文件中添加如下配置:
xxl:
job:
admin:
### 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
addresses: http://127.0.0.1:8088/xxl-job-admin
### 执行器通讯TOKEN [选填]:非空时启用;
accessToke: default_token
executor:
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
appname: xxl-job-executor-sample
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
ip: 127.0.0.1
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
port: 9999
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
logpath: /data/applogs/xxl-job/jobhandler
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
logretentiondays: 30

2.5.3 添加执行器配置
创建XxlJobConfig配置对象:
@Configuration
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() {
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
2.5.4 添加任务处理类
添加任务处理类,交给Spring容器管理,在处理方法上贴上@XxlJob注解Demo
@Component
public class XxlJobController {
@XxlJob("demoXXjob")
public void demoXXjob() throws Exception {
System.out.println("执行定时任务,执行时间:"+new Date()+"Hello xxl-job");
}
}

2.5.5 实战代码
@Component
public class XxlJobController {
//自建表做查询,省略建表与查询业务
@Resource
private SubjectCategoryService subjectCategoryService;
@XxlJob("selectEamInfo")
public void selectEamInfo() throws Exception {
Result> listResult = subjectCategoryService.searchInfo();
listResult.getData().forEach(result->{
System.out.println(result);
});
System.out.println("执行定时任务,执行时间:"+new Date());
}
}

2.6 运行程序
2.6.1 任务配置&触发执行
登录调度中心,在任务管理中新增任务,配置内容如下:

新增后界面如下:

接着启动定时调度任务

2.6.2 查看日志
在调度中心的调度日志中就可以看到,任务的执行结果.

管控台也可以看到任务的执行信息.

2.6.3、实战效果如下
配置xxljob表达式:

执行一次验证

日志查看

后台查看

即xxl_job集成springboot项目成功。

浙公网安备 33010602011771号