一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第8天,点击查看活动详情。
简介
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。
特性
-
简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
-
动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;
-
调度中心HA(中心式):调度采用中心式设计,“调度中心”自研调度组件并支持集群部署,可保证调度中心HA;
-
执行器HA(分布式):任务分布式执行,任务”执行器”支持集群部署,可保证任务执行HA;
-
注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时,也支持手动录入执行器地址;
-
弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务;
XXL-JOB架构
集成步骤
执行脚本
从官网gitee.com/xuxueli0323… 下载源码,执行源码中doc/db/tables_xxl_job.sql的脚本,执行后的表结构如下:
修改配置信息
下载XXL-job-admin工程,修改application.properties中的数据库连接配置和邮箱配置
启动xxl-job-admin项目
系统运行成功后,访问localhost:8080/xxl-job-admin效果如下
配置xxl-job客户端执行器
添加依赖
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>
修改配置
在yml配置文件中添加xxl配置
xxl:
job:
admin:
# 管理台地址
addresses: http://localhost:8080/xxl-job-admin
accessToken:
executor:
# 当前项目名称
appname: test
address:
ip:
port: 9998
logpath:
logretentiondays: 30
添加config配置
@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;
}
}
新增任务
@Component
public class SendEmailJob
{
private Logger logger = LoggerFactory.getLogger(SendEmailJob.class);
@XxlJob("sendEmailJob")
public void sendEmail()
{
logger.info("send email start..");
}
}
新增执行器
- AppName:AppName的名称
- 名称:执行器名称
- 注册方式:选择手动录入
- 机器地址:填写的为本地的ip地址和yml文件中配置的端口
配置任务
- 执行器:选择新增的执行器,默认选择的是示例执行器
- 调度类型:Cron表达式
- JobHandler:xxljob注解中定义的
- 运行模式:bean模式
启动执行器项目
[Thread-5] INFO [] com.xxl.job.core.server.EmbedServer - >>>>>>>>>>> xxl-job remoting server start success, nettype = class com.xxl.job.core.server.EmbedServer, port = 9998
表示执行器已经注册成功。
启动任务
选择启动选项,启动成功后出现定时任务执行的日志信息,如果已经启动成功,则变成停止选项
2022-04-09 17:35:30.280 [Thread-8] INFO [] com.skywares.xxjob.job.SendEmailJob - send email start..
也可以查看调度日志
常见错误
XXL-JOB调度失败:执行器地址为空
执行任务时,检查执行器选择是否正确,需要选择自定义的执行器。
xxl-rpc remoting fail, StatusCode(404) invalid
检查新增执行器的执行地址是否填写正确,地址和IP都是在yml进行配置的
结语
本文介绍了SpringBoot集成XXL-Job基本功能,关于XXL-Job的高级特性和原理将在后续的文章中进行详细讲解。