技术栈
XxlJob
springBoot
XxlJob介绍
具体的介绍,官网是最详细的,大家可以去官网仔细了解
具体操作
首先需要在开发工具中导入XxlJob源码
gitee:源码地址
j加载到idea之后,项目结构如下:
其中 xxl-job-admin是调度中心模块
xxxl-job-core 是具体的功能引用模块
xxl-executor 是执行器的与任务模块
数据库配置
新建数据库 并执行db下的sql文件
执行后的表结构如下:
具体每个表的是存储什么功能的,可以去参考官方文档,里边很详细
配置文件
打开xxl-job-admin模块resource 下的配置文件 配置xxljob 数据库
这里只需要改动数据的配置就可以
改动之后,启动xxl-job-admin 模块,启动成功之后就可以访问调度中心的页面
这个时候页面里边的执行器管理里边是没有 OnLine机械地址的,因为我们的调度器模块还没有起
xxlJob 是将调度中心与执行器 和任务做到解耦的,具体如何做到解耦,大家可以仔细阅读官方文档。
启动xxljob的执行器
接下来我们先来启动 xxljob 源码里边的示例执行器,后边我们再配置我们自己项目里的执行器
启动xxl-job-executor-sample-springboot 项目
启动之后,我们再返回我们的调度中心页面里的执行器管理,发现示例执行器已将上线了Online
开始第一个定时任务
调度中心与执行器模块配置并启动之后,我们开始编写我们的第一个定时任务;
打开xxl-job-executor-sample-springboot下边service包下的SampleXxlJob类
这个里边是xxlJob 源码里边的示例任务,里边主要就是加上一个XxlJob 注解去指定我们的任务名称,也是为了调度中心能够识别到我们的任务示例;
@XxlJob(value = "demo23", init = "init", destroy = "destroy")
主要对这三个注解参数进行说明;
-
value
:该参数用于指定任务的唯一标识,同一个调度中心下的任务不能重复。这个值在整个调度流程中是唯一的,用于标识和区分不同的任务。 -
init
:该参数用于指定任务启动时调用的方法。当一个任务被调度执行时,会先执行init
方法进行一些初始化操作,例如加载配置文件、初始化数据库等。在这个方法中,可以编写一些任务启动时需要进行的操作。 -
destroy
:该参数用于指定任务销毁时调用的方法。当一个任务执行完成后,无论成功还是失败,都会执行destroy
方法进行一些清理操作,例如关闭数据库连接、释放资源等。在这个方法中,可以编写一些任务销毁时需要进行的操作。
我们还在这个SampleXxlJob类编写我们自己的定时任务;
任务很简单,向控制台输出时间;
@XxlJob(value = "demo23", init = "init", destroy = "destroy")
public void demo23() throws Exception {
String data= LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println("--->任务开始执行了" +data
);
XxlJobHelper.log("XXL-JOB, Hello World.");
}
其中 XxlJobHelper.log("XXL-JOB, Hello World.");
是保存日志到日志文件的,日志可以再调度成功之后点击执行日志进行查看,
回到调度中心页面的任务管理,将我们编写的任务添加,并指定执行时间
点击任务管理的新增;
jobHandler 任务处理器就是我们刚才编写的demo23,xxljob注解的value
我们便配置的cron 表达式是没隔10秒执行一次;
我们点击操作下的启动 按钮,我们的任务就开始执行了;
再体验过之后,我们自己新建一个boot 项目将xxljob集成到我们自己的项目来;
xxxlJob集成自己的springboot项目
将我们刚才跑的源码项目使用 maven 中的install命令打包到我们的本地仓库当中;
然后进入仓库找到 com包下的xuxueli
查看自己仓库下xxljob的版本,然后将以来引入到我们自己项目的pom中
我这里的版本依赖是
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.4.1-SNAPSHOT</version>
</dependency>
引入之后我们只需要参考源码里边的的执行器 xxl-job-executor-sample-springboot模块去配置就好了
首先把源码里边config包下的XxlConfig 配置文件复制过来,然后参考源码去配置我们resources
下的配置文件即可;
# web port
server.port=8087
# no web
#spring.main.web-environment=false
# log config
logging.config=classpath:logback.xml
### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### xxl-job, access token
xxl.job.accessToken=default_token
### xxl-job executor appname
xxl.job.executor.appname=testdemo
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9996
### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30
这里的
xxl.job.executor.appname=testdemo 我们需要配置我们自己执行器的名字
配置完成之后,执行项目
我这里已经事先新增了一个执行器,这个新增的执行器需要跟我们上一步配置的xxl.job.executor.appname=testdemo名字相同;
页面显示我们的testdemo 执行器已经上线了;
接下来我们可以开始新建任务;
新建任务处理类:
package com.example.xxldemo.demo;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.mybatis.logging.Logger;
import org.mybatis.logging.LoggerFactory;
import org.springframework.stereotype.Component;
/**
* @author LiMingHui
* @create 2023/9/17 &14:49
*/
@Component
public class demoJob {
private final static Logger logger = LoggerFactory.getLogger(demoJob.class);
/**
* 我的第一个定时器任务
*/
@XxlJob("firstJobHandler")
public void funJobHandler() {
System.out.println("啊~我执行了~~~~");
}
}
然后再任务管理页面进行新增,需要注意的是执行器一定要选择我们新建项目里边的执行类,也就是testdemo
新建成功之后,启动任务;
springboot 项目集成xxljob 就成功了,博主自己也处于学习阶段,能力有限,希望大家有什么问题可以多进行交流