前言
最新开始研究xxl-job,之前搞过spring 集成的,现在来说下与springboot集成的,还是有些不一样的。
正文
学习通道
xxl-job 源码和文档地址:访问链接
部署调度中心
初始化数据库脚本
在github(https://github.com/xuxueli/xxl-job)下载xxl-job 的源码 ,用idea打开后项目目录结构如下图所示:
在db文件夹下找到*.sql的脚本文件,在本地数据库(因为我把定时器放在本地)执行脚本,建立xxl-job的数据库,如下图(截图中为可视化mysql数据的工具 Navicat):
配置调度中心
找到xxl-job xxl-job-admin 工程下的属性文件,修改数据库配置为刚刚配置的本地数据源:主要修改url,username,password,如下图:
提示:这块儿还可以配置报警邮箱,当定时任务执行出现问题了,邮箱的主人会第一时间收到它的通知;
部署调度中心
部署调度中心(xxl-job-admin),访问调度中心的管理控制页面:可以直接在idea 中启动程序,也可以将程序打包(maven package),用 “java -jar jar包名称 -d”等后台启动调度中心;
启动成功后,根据日志提示信息(http://localhost:8080/xxl-job-admin)访问管理页面:账号 admin | 默认初始密码 123456
登录成功,显示页面(备注:下方截图是本地已经配置好的调度中心及定时任务)
创建执行器
因本地工程是springboot的,所以创建一个Springboot版本的执行器;
导入maven 依赖
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.1.1-SNAPSHOT</version>
</dependency>
配置yml文件或属性文件 (此处以yml文件为例)
xxl:
job:
admin:
# 地址为刚刚配置的调度中心的访问地址
addresses: http://127.0.0.1:8080/xxl-job-admin
executor:
# 自定义appName(执行器名称)
appname: xxl-job-appName
# ip 可以写 (程序跑在的机器ip上),也可以不写
ip:
port: 9999
# 执行器日志文件存储路径
logpath: /data/applogs/xxl-job/jobhandler
# 设置日志过期时间 -1表示永不过期
logretentiondays: -1
accessToken:
编写配置文件,读取yml文件刚刚配置的属性
package com.cxqz.nlp.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.Configuration;
/**
* xxl-job config
*
* @author xuxueli 2017-04-28
*/
@Configuration
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;
}
}
编写任务
(任务可以理解为想要定时任务执行的东西,这里我调用的是用户等级更新接口)
@JobHandler(value = "testJobHandler")
@Component
public class TestHandler extends IJobHandler {
@Autowired
private UserService userService;
@Override
public ReturnT<String> execute(String param) throws Exception {
XxlJobLogger.log(" >>用户等级更新任务开始执行....");
try {
//自定义调用接口
userService.updateLevel();
return SUCCESS;
} catch (Exception e) {
XxlJobLogger.log(e);
return FAIL;
}
}
}
启动执行器
启动Springboot 程序,以便调度中心可以找到执行器;
新建执行器
在调用中心中新建执行器
打开管理页面,到【执行器管理】中新建执行器,如下图:
填写执行器信息,如下图:
设置 【自动注册】后的执行器地址:
新增任务
新增任务,打开【任务管理】,选择刚添加的【测试执行器】,选择【新增】,如下图:
添加任务信息,绑定程序中写的JobHandler,如下图:
执行(启动)任务,查看执行情况
现在可以启动任务了,找到刚添加的任务,选择【执行一次】或【启动】,这里我选择了【执行一次】:
想要查看执行情况,选择上图中的【查询日志】,将会看到“调度备注”和“执行日志”;
调度备注 详情:
执行日志 详情:
这样,利用定时任务框架执行任务就成功了~
总结
Springboot 集成 xxl-job 完整版教程到此结束,更多内容请移步到xxl-job官网 或者下方留言 也行啊,大概一年前在公司分享过xxl-job,时间过的真快~
PS: 刚刚发现【XXL社区】还有很多项目,相当的厉害鸭!