1、概述
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展
2、环境搭建
(1)源码下载
快速使用xxl-job,我们可以首先到gitee或者是github上拉取它的开源代码
源码仓库地址:
github地址:
https://github.com/xuxueli/xxl-job
gitee地址:
http://gitee.com/xuxueli0323/xxl-job
(2)解压所下载的压缩包
(3)初始化 "调度数据库"
在 "E:\xxl-job-3.1.0\xxl-job-3.1.0\doc\db"中有一个sql脚本,执行这个sql脚本,创建xxl_job数据库(如下图),调度中心依赖该数据库
(4)IDEA中打开该项目,下图为项目结构,其中 xxl-job-admin 模块为调度中心模块,也是调度中心平台的主启动项。
作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。
(5)启动该项目之前,需要修改其 application.properties 配置文件中的数据库连接信息
细看图中注释即可,配置成自己的,access_token 需记住,后面 Excutor 时需要用到
(6)配置完,也就环境搭建已完成。就可以启动这个项目了,只要启动 xxl-job-admin 项目就行
3、入门教程
(1)登录调度中心
访问 localhost:8080/xxl-job-admin
数据库中存了账户密码,默认的
账户:admin
密码:123456
(2)新建执行器
执行器:任务的绑定的执行器,任务触发调度时将会自动发现注册成功的执行器, 实现任务自动发现功能; 另一方面也可以方便的进行任务分组,每个任务必须绑定一个执行器
属性说明:
属性名称 | 说明 |
---|---|
AppName | 是每个执行器集群的唯一标示AppName, 执行器会周期性以AppName为对象进行自动注册。可通过该配置自动发现注册成功的执行器, 供任务调度时使用; |
名称 | 执行器的名称, 因为AppName限制字母数字等组成,可读性不强, 名称为了提高执行器的可读性; |
排序 | 执行器的排序, 系统中需要执行器的地方,如任务新增, 将会按照该排序读取可用的执行器列表; |
注册方式 | 调度中心获取执行器地址的方式,也就是我们需要执行任务的服务地址及执行器的端口号 |
机器地址 | 注册方式为"手动录入"时有效,支持人工维护执行器的地址信息; |
(3)新建任务
基础配置:
- 执行器:每个任务必须绑定一个执行器, 方便给任务进行分组
- 任务描述:任务的描述信息,便于任务管理;
- 负责人:任务的负责人;
- 报警邮件:任务调度失败时邮件通知的邮箱地址,支持配置多邮箱地址,配置多个邮箱地址时用逗号分隔
调度配置:
- 无:该类型不会主动触发调度;
- CRON:该类型将会通过CRON,也就是CRON表达式,触发任务调度
- 固定速度:该类型将会以固定速度,触发任务调度;按照固定的间隔时间,周期性触发;
任务配置:
- 运行模式:
BEAN模式:
任务以 JobHandler方式维护在执行器端,需要结合 "JobHandler" 属性匹配执行器中任务;
- JobHandler:在运行模式为 "BEAN模式" 时生效,对应执行器中新开发的JobHandler类,“@JobHandler”注解自定义的value值;
- 执行参数:任务执行所需的参数
我就介绍这些入门案例所会用到的参数
(4)编写入门案例
1、先创建一个springboot项目,由于我的是JDK11,不是JDK17以上的,所以没创建springboot3.0项目,创建的是springboot2.x.x的。引入的xxl-job的依赖是不支持3.1.0的,我这里引入的是2.3.0版的,你们如果想引入3.1.0版的得要jdk17,接下来的案例都是相同的。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.techno</groupId>
<artifactId>xxl-job-sample</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>xxl-job-sample</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.12</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
</project>
2、编写启动类
@SpringBootApplication
@EnableScheduling //开启任务调度
public class TaskApplication {
public static void main(String[] args) {
org.springframework.boot.SpringApplication.run(TaskApplication.class, args);
}
}
3、编写配置文件
# application.yaml
server:
port: 8881
xxl:
job:
admin:
addresses: http://127.0.0.1:8080/xxl-job-admin #这个是启动xxl-job-admin 的地址
accessToken: default_token # 这里的accessToken 需要与 xxl-job-admin 中配置的 accessToken 一致,是用来进行校验的
executor:
appname: xxl-job-demo #需要与创建执行器时设置的 AppName 一致
port: 9999
4、编写配置类
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
//暂时用不到
@Value("${xxl.job.admin.accessToken}")
private String accessToken;
//暂时用不到
//@Value("${xxl.job.executor.address}")
//private String address;
//暂时用不到
//@Value("${xxl.job.executor.ip}")
//private String ip;
//暂时用不到
//@Value("${xxl.job.executor.logpath}")
//private String logPath;
//暂时用不到
//@Value("${xxl.job.executor.logretentiondays}")
//private int logRetentionDays;
//调度中心地址
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
//执行器名称
@Value("${xxl.job.executor.appname}")
private String appname;
//默认从 9999 开始,如果有多台服务器, -1 操作
//假如我现在启动了一台服务器,端口号就是 9999 ,那第二台就是9998,以此类推
@Value("${xxl.job.executor.port}")
private int port;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setPort(port);
// xxlJobSpringExecutor.setAddress(address);
// xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setAccessToken(accessToken);
// xxlJobSpringExecutor.setLogPath(logPath);
// xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
5、编写任务
@Component
public class XxlJobTask {
//这个注解中的值,需要与新建任务时设置的 jobHandler 的值一致
@XxlJob("xxlJobDemo")
public void xxlJobDemo(){
System.out.println(LocalDateTime.now());
}
}
6、启动任务调度
7、然后启动项目,就会执行我们所设置的任务,输出现在时间
8、可通过调度中心中的调度日志查看是否成功
教程结束啦,动动你们发财的手指,多多点赞吧,谢谢!!新人多多指教!!!