XXL-Job接入
1.启动xxl-job服务
1)下载xxl-job源码
下载地址:https://github.com/xuxueli/xxl-job/
2)启动xxl-job-admin
下载源码后,目录结构:
在/doc/db/目录下找到建表语句,在MySQL中执行
3)Xxl-job-admin本身就是springboot项目,配置好数据源,直接启动,就启动了调度中心
4)进去xxl-job-admin管理页面(默认端口 8080)
运行报表:查看调度的失败次数与成功次数,并有统计图呈现
任务管理:对调度任务进行管理的中心
调度日志:调度任务的成功与否实时查看
执行器管理:执行器相关的配置
用户管理:用户登录与权限管理
2.添加执行器
1)springboot项目中,配置文件添加配置
ip和address均可为空
logretentiondays和logpath分别为日志保存天数和日志保存路径
2)导入xxl-job-core依赖,版本和配置中心一直,此处应用2.2.0。Java配置类引入配置
@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.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
3)编写调度方法的handler
在标注了一个@XxlJob的注解上就为一个handler,方法体内实现自己要的逻辑。
4)配置执行器的handler
a. 新增执行器,在调度中心的执行器管理中点击新增
b.查看执行器,只要执行器项目配置了调度中心地址,则会自动注册
c. 配置任务,在任务管理中点击新增。路由策略和阻塞处理策略见图下方
路由策略:
1.FIRST(第一个):固定选择第一个机器;
2.LAST(最后一个):固定选择最后一个机器;
3.ROUND(轮询):;
4.RANDOM(随机):随机选择在线的机器;
5.CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
6.LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
7.LEAST_RECENTLY_USED(最近最久未使用):最久未使用的机器优先被选举;
8.FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
9.BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
阻塞处理策略:
1.单机串行(默认):调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;
2.丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
3.覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;
失败重试次数:支持自定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进行重试
任务超时时间:支持自定义任务超时时间,任务运行超时将会主动中断任务;
d. 启动执行器,在编辑好任务后可对任务进行操作。
e.查看日志,启动执行器后,在调度日志中可以查看相关的日志。
调度日志里可以看到是否调用成功,调度成功则会在调度结果显示“成功”,而handler的执行结果,“成功”则表示代码返回的是ResultT.success,“失败”则表示返回的是ResultT.fail.