XXL-JOB 是一个开源的、轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。项目github下载地址 点击查看 ,项目使用文档点击查看
首先我们去github 或者 码云 上下载最新的 xxl-job的代码 不同版本的具体继承配置不太相同
调度数据库初始化SQL脚本,脚本位置 /xxl-job/doc/db/tables_xxl_job.sql ,导入到我们的数据库中,会自行创建一个xxl-job的库,这个可以自行更改,导入你本地的数据库也行,然后将项目导入本地开发工具中,更改你数据库的地址,用户名,密码
点击运行
xxl-job-admin 启动项目,项目登录默认的用户名密码 admin/123456
到此我们完成了第一步,接下来我们在自己的springboot上整合一下,首先在项目的pom文件中加入依赖
com.xuxueli
xxl-job-core
2.1.0
然后在项目的 application.properties 配置文件中加入
server.port=8088
### xxl-job 的访问地址
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### xxl-job 的appname ip不填代表本机
xxl.job.executor.appname=plat-job
xxl.job.executor.ip=
xxl.job.executor.port=8087
### xxl-job, access token
xxl.job.accessToken=
### xxl-job log path
xxl.job.executor.logpath=E:/applogs/
### xxl-job log retention days
xxl.job.executor.logretentiondays=-1
配置 XxlJobConfig
package com.example.mycloud.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
//指定任务Handler所在包路径
@ComponentScan(basePackages = "com.example.mycloud.job")
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info("====xxl-job config init====");
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;
}
}
写个测试任务
package com.ruoyi.project.job;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import org.springframework.stereotype.Component;
@JobHandler(value="TestHandler")
@Component
public class TestHandler extends IJobHandler {
@Override
public ReturnT execute(String param) throws Exception {
System.out.println("测试job的输入参数:"+param);
return SUCCESS;
}
}
然后启动你的springboot项目,然后在 xxl-job admin 中配置相应的信息,首先配置执行器,就是你配置文件的 appname, 名称 排序随便取,注册方式自动就行,这样xxl-job 就可以根据你appname找到相应的项目去执行定时任务
添加完执行管理器之后,我们添加刚测试的定时job ,执行器选择你刚刚新增的那个名字,路由策略,如果你同一个项目部署多台,可根据下拉选项选择不同的路由策略
点击保存之后界面如图,要在你的执行器下找,不然会找不到,点击执行是立即执行一次,启动是开始按照 cron的规则去运行
启动你的springboot项目,点击执行,看控制台输出,点击上图的日志,可以查看定时任务是否运行成功
这里我们就完成了springboot项目整合 xxl-job 了,主要注意几点,一,执行数据库脚本,启动你的 xxl-job 项目。二 ,在你的springboot项目中添加依赖,配置 xxl-job-admin 的地址。 三,在xxl-job=admin 中配置你的执行器,这里注意,同一个名称的执行器端口不能相同,如果你的项目部署多台,最好直接使用项目的端口号。
springboot的具体继承配置在项目中有代码示例的,不用版本配置 使用不太相同,以官方最新版本 demo 为主
另外写一下个人想法,定时任务工程是单独的,里面不要掺杂其他的业务代码,单独起一个定时任务的项目,如果我们需要操作不同的数据库,这里之前也写过 springboot 多数据源配置,点击即可参考 ,