《分布式任务调度平台XXL-JOB》手册
- 格式:doc
- 大小:1011.00 KB
- 文档页数:11
XXL-Job分布式任务调度分布式情况下定时任务会出现哪些问题?分布式集群的情况下,怎么保证定时任务不被重复执⾏分布式定时任务解决⽅案①使⽤zookeeper实现分布式锁缺点(需要创建临时节点、和事件通知不易于扩展)②使⽤配置⽂件做⼀个开关缺点发布后,需要重启③数据库唯⼀约束,缺点效率低④使⽤分布式任务调度平台XXLJOB、Elastric-Job、TBScheduleXXLJOB介绍1、简单:⽀持通过Web页⾯对任务进⾏CRUD操作,操作简单,⼀分钟上⼿;2、动态:⽀持动态修改任务状态、暂停/恢复任务,以及终⽌运⾏中任务,即时⽣效;3、调度中⼼HA(中⼼式):调度采⽤中⼼式设计,“调度中⼼”基于集群Quartz实现,可保证调度中⼼HA;4、执⾏器HA(分布式):任务分布式执⾏,任务"执⾏器"⽀持集群部署,可保证任务执⾏HA;5、任务Failover:执⾏器集群部署时,任务路由策略选择"故障转移"情况下调度失败时将会平滑切换执⾏器进⾏Failover;6、⼀致性:“调度中⼼”通过DB锁保证集群分布式调度的⼀致性, ⼀次任务调度只会触发⼀次执⾏;7、⾃定义任务参数:⽀持在线配置调度任务⼊参,即时⽣效;8、调度线程池:调度系统多线程触发调度运⾏,确保调度精确执⾏,不被堵塞;9、弹性扩容缩容:⼀旦有新执⾏器机器上线或者下线,下次调度时将会重新分配任务;10、邮件报警:任务失败时⽀持邮件报警,⽀持配置多邮件地址群发报警邮件;11、状态监控:⽀持实时监控任务进度;12、Rolling执⾏⽇志:⽀持在线查看调度结果,并且⽀持以Rolling⽅式实时查看执⾏器输出的完整的执⾏⽇志;13、GLUE:提供Web IDE,⽀持在线开发任务逻辑代码,动态发布,实时编译⽣效,省略部署上线的过程。
⽀持30个版本的历史版本回溯。
14、数据加密:调度中⼼和执⾏器之间的通讯进⾏数据加密,提升调度信息安全性;15、任务依赖:⽀持配置⼦任务依赖,当⽗任务执⾏结束且执⾏成功后将会主动触发⼀次⼦任务的执⾏, 多个⼦任务⽤逗号分隔;16、推送maven中央仓库: 将会把最新稳定版推送到maven中央仓库, ⽅便⽤户接⼊和使⽤;17、任务注册: 执⾏器会周期性⾃动注册任务, 调度中⼼将会⾃动发现注册的任务并触发执⾏。
分布式任务调度平台XXL-JOB快速使⽤与问题总结1.XXL-JOB简介XXL-JOB is a lightweight distributed task scheduling framework. It's core design goal is to develop quickly and learn simple, lightweight, and easy to expand. Now, it's already open source, and many companies use it in production environments, real "out-of-the-box".XXL-JOB是⼀个轻量级分布式任务调度平台,其核⼼设计⽬标是开发迅速、学习简单、轻量级、易扩展。
现已开放源代码并接⼊多家公司线上产品线,开箱即⽤。
——引⽤⾃XXL-JOB的GIT项⽬介绍关于XXL-JOB的其他介绍可以,它含有丰富的特性,⽀持分布式和动态任务添加以及权限控制等。
2.搭建XXL-JOB项⽬①下载源码https:///xuxueli/xxl-job/②执⾏SQLxxl-job-2.1.1\xxl-job-2.1.1\doc\db\tables_xxl_job.sql③修改配置### xxl-job, datasourcespring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&characterEncoding=UTF-8ername=rootspring.datasource.password=root_pwdspring.datasource.driver-class-name=com.mysql.jdbc.Driver### xxl-job, access token 秘钥填了下⾯的⼦项⽬要和这个⼀致xxl.job.accessToken=需要注意的是⼦项⽬中的配置地址要和admin中的访问⾸页地址⼀致:### 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④启动项⽬我们⾸选需要启动项⽬中的admin,然后再启动xxl-job-executor-samples下⾯的内容,这⾥我们启动,这⾥⽐较简单的⽅式是通过springboot的例⼦进⾏启动,这也是作者推荐的启动⽅式。
xxl-job调度任务简单使⽤1. 简介XXL-JOB是⼀个分布式任务调度平台,其核⼼设计⽬标是开发迅速、学习简单、轻量级、易扩展。
现已开放源代码并接⼊多家公司线上产品线,开箱即⽤。
2. 使⽤步骤1:源码下载数据库脚本再源码/xxl-job/doc/db/tables_xxl_job.sql3.调度中⼼项⽬:xxl-job-admin修改配置⽂件中的数据库地址或端⼝/xxl-job/xxl-job-admin/src/main/resources/application.properties4.启动xxl-job-admin⼯程访问地址为:账号/密码 admin/1234565.⾄此,xxl-job服务启动完成,接下来将xxl植⼊到所要添加定时任务的⼯程中此次测试我使⽤的是:2.3.0版本<!-- /maven2/com/xuxueli/xxl-job-core/ --><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.3.0</version></dependency>6.修改⼯程的yml⽂件,引⼊xxl配置#引⼊xxl-jobxxl:job:admin:# 调度中⼼部署跟地址 [选填]:如调度中⼼集群部署存在多个地址则⽤逗号分隔。
# 执⾏器将会使⽤该地址进⾏"执⾏器⼼跳注册"和"任务结果回调";为空则关闭⾃动注册;addresses: http://localhost:8080/xxl-job-adminexecutor:# 执⾏器AppName [选填]:执⾏器⼼跳注册分组依据;为空则关闭⾃动注册appname: springcloudalibaba-user-experience-job# 执⾏器IP [选填]:默认为空表⽰⾃动获取IP,多⽹卡时可⼿动设置指定IP,该IP不会绑定Host仅作为通讯实⽤;# address: http://192.168.2.29:9191# 地址信息⽤于 "执⾏器注册" 和 "调度中⼼请求并触发任务";# ip: 192.168.2.29# 执⾏器运⾏⽇志⽂件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使⽤默认路径;logpath: ./logs/xxl-job# 执⾏器⽇志⽂件保存天数 [选填] :过期⽇志⾃动清理, 限制值⼤于等于3时⽣效; 否则, 如-1, 关闭⾃动清理功能;logretentiondays: 30# 执⾏器端⼝号 [选填]:⼩于等于0则⾃动获取;默认端⼝为9999,# 单机部署多个执⾏器时,注意要配置不同执⾏器端⼝;port: 9192# 执⾏器通讯TOKEN [选填]:⾮空时启⽤;# accessToken:7.添加config配置⽂件import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Profile;/*** xxl-job config** @author* @date 2020/11/23*/@Slf4j@Configuration@Profile("!dev")public class XxlJobConfig {@Value("${xxl.job.admin.addresses}")private String adminAddresses;@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;/*** 注意:如果想本机调试,需要设置address、ip* @return*/@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appName);//xxlJobSpringExecutor.setAddress(address);xxlJobSpringExecutor.setPort(port);//xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}}8.执⾏器管理--》添加执⾏器添加完成后,可以点击查看详情9.再代码中创建定时任务import com.alibaba.fastjson.JSONObject;import com.xxl.job.core.context.XxlJobHelper;import com.xxl.job.core.handler.annotation.XxlJob;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.InitializingBean;import ponent;import java.util.Date;@Slf4j@Componentpublic class UserJob1 implements InitializingBean {/*** 定时同步群发任务结果** @return*/@XxlJob("xxlJobTest")public String execute() {("start userTodoJob, time at:" + new Date());String params = XxlJobHelper.getJobParam();JSONObject jsonObject = JSONObject.parseObject(params);Integer orgId = jsonObject.getInteger("orgId");String corpId = jsonObject.getString("corpId");System.out.println("执⾏了"+params);return "执⾏了";}@Overridepublic void afterPropertiesSet() throws Exception {("Combination Job init suc at: " + new Date());}}10.任务管理中添加新的任务添加完成后,可再后⾯对该任务进⾏操作。
xxl-job介绍什么是任务调度什么是任务调度?某⼀时间段进⾏任务的操作。
具体任务调度有哪些应⽤的场景?数据同步、交易信息、清除⽤户的信息、定期发送报表数据、活动推送等。
传统实现定时任务的⽅式?Thread、TimeTask、ScheduleExecutorService、Quartz 等;不过,这⼏种⽅式都是在单点系统使⽤,⼀旦Job服务器宕机之后,就必须采取⼀些措施;具体操作如下:(1) 使⽤⼼跳检测监控⾃动重启、任务补偿机制(任务做标记)(2) 定时任务在执⾏代码的时候中间突然报错,使⽤⽇志记录错误,跳过继续执⾏,在使⽤定时Job 扫描⽇志错误记录,进⾏补偿信息。
(3) 定时Job 在执⾏的时候,导致整个 Job 异常结束掉,发送邮件通知给运维⼈员。
分布式定时任务的⽅式?XXL-Job、Elastic-job等。
不过,既然采⽤分布式,那么肯定会遇到项⽬部署集群,导致任务重复执⾏多次;具体操作如下:(1) Zookeeper 实现分布式锁,每次保证拿到锁再执⾏,效率⽐较低。
(2) 配置⽂件中加⼊定时任务的开关,但是只能保证⼀台服务器执⾏,变为单击服务器。
(3) 启动的时候使⽤数据库唯⼀标识;同样是效率低。
(4) 分布式调度任务平台,解决了任务幂等问题,Job 负载均衡轮询机制(推荐)。
那么现在我们来总结下,⾸先传统的定时任务,⼏乎⽆法做到⾼可⽤,再加上项⽬部署集群,会导致任务幂等性问题;此时分布式定时任务调度平台便发挥了作⽤,咱们拿 XXL-Job 来进⾏说明;相关作⽤如下:(1) ⽀持Job集群,Job 负载均衡轮询机制保证幂等性问题。
(2) ⽀持Job补偿,如果Job执⾏失败的话,会⾃动实现重试机制,超过重启次数后,会发送邮件通知运维⼈员。
(3) ⽀持Job⽇志记录。
(4) 动态配置定时规则,传统定时Job触发规则都是写死在代码中。
XXL-JOB简介开源社区:环境:Maven3+Jdk1.8+Mysql5.7+xxl-job执⾏原理调度平台、执⾏器、任务管理,相关解释如下:调度平台:统⼀管理任务调度的平台,负责转发任务到对应的执⾏服务器。
(19)中华人民共和国国家知识产权局(12)发明专利申请(10)申请公布号 (43)申请公布日 (21)申请号 201910918340.5(22)申请日 2019.09.26(71)申请人 山东浪潮通软信息科技有限公司地址 250100 山东省济南市高新区孙村镇科航路2877号(72)发明人 高新 (74)专利代理机构 济南信达专利事务所有限公司 37100代理人 姜明(51)Int.Cl.G06F 8/30(2018.01)G06F 9/50(2006.01)G06F 16/27(2019.01)(54)发明名称一种基于XXL-JOB实现分布式调度任务的方法及系统(57)摘要本发明公开了一种基于XXL -JOB实现分布式调度任务的方法及系统,属于计算机软件开发技术领域。
本发明的基于XXL -JOB实现分布式调度任务的方法配置部署调度中心,统一管理任务调度平台上调度任务,触发调度执行,并提供任务管理平台;配置部署执行器项目,接收调度中心的调度并执行;在可视化界面配置执行器及新建任务。
该发明的基于XXL -JOB实现分布式调度任务的方法能够减轻服务器压力,提高系统的运行效率,在确保各用户数据间隔的同时能完成调度任务,具有很好的推广应用价值。
权利要求书1页 说明书6页 附图1页CN 110688101 A 2020.01.14C N 110688101A1.一种基于XXL -JOB实现分布式调度任务的方法,其特征在于:该方法配置部署调度中心,统一管理任务调度平台上调度任务,触发调度执行,并提供任务管理平台;配置部署执行器项目,接收调度中心的调度并执行;在可视化界面配置执行器及新建任务。
2.根据权利要求1所述的基于XXL -JOB实现分布式调度任务的方法,其特征在于:具体包括以下步骤:S1、初始化调度数据,创建数据库;S2、配置调度中心;S3、配置执行器项目,配置项目中的配置文件;S4、新增执行器;S5、新建任务;S6、编写代码来实现执行调度任务的执行器。
XXL-JOB任务调度⽇常开发中难免会碰到需要开启定时任务处理业务。
这时我们第⼀时间想到的是Spring的Task,但是很不⽅便,这⾥可以列出⼏点: 1.⼀旦需要更改定时任务时间,我们就要打开IDE修改cron表达式; 2.在特殊的情况下代码报错了,我们就要打开Log查看是什么导致的问题; 3.需要很多定时任务去处理业务就要新建多个,突然不想执⾏这个任务了,我们就要再打开IDE注释那些代码。
就特别不好管理。
可能⼜有⼈要说了: 1.我可以⽤Redis进⾏动态修改cron表达式;--------看下⾯代码 2.我写个Aop,只要出现异常了我就记录相关信息;-------- ⽜掰!Aop固然好,但是你觉得真的⽅便了吗? 3.······我就是不闲⿇烦,咋地。
--------打扰了package cn.chenghao.config;import lombok.AllArgsConstructor;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.SchedulingConfigurer;import org.springframework.scheduling.config.ScheduledTaskRegistrar;import org.springframework.scheduling.support.CronTrigger;import javax.annotation.PostConstruct;/*** ⾃定义定时任务** @Author chenghao* @Date 2020/4/14 11:56**/@Configuration@EnableScheduling@AllArgsConstructorpublic class CompleteScheduleConfig implements SchedulingConfigurer {/*** StringRedis模板*/private final StringRedisTemplate stringRedisTemplate;/*** 初始化*/@PostConstructprivate void init() {// redis中不存在则创建stringRedisTemplate.opsForValue().setIfAbsent("cron", "0/3 * * * * ?");}/*** 配置任务*/@Overridepublic void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {// 给定cron表达式,触发Runnable任务scheduledTaskRegistrar.addTriggerTask(() -> {System.out.println("执⾏定时任务中.......");},triggerContext -> {// 获取cron表达式String cron = stringRedisTemplate.opsForValue().get("cron");// 返回执⾏周期return new CronTrigger(cron).nextExecutionTime(triggerContext);});}}!(真的是太⽅便了)----------------------------------好,废话不再多说----------------------------------XXL-JOB地址:概述:XXL-JOB是⼀个分布式任务调度平台,其核⼼设计⽬标是开发迅速、学习简单、轻量级、易扩展。
分布式定时任务调度系统技术解决⽅案(xxl-job、Elastic-job、Saturn)1.业务场景保险⼈管系统每⽉⼯资结算,平安有150万代理⼈,如何快速的进⾏⼯资结算(数据运算型)保险短信开门红/电商双⼗⼀ 1000w+短信发送(短时汇聚型)⼯作中业务场景⾮常多,所涉及到的场景也各不相同,这使得我们定时任务系统应该集管理、调度、任务分配、监控预警为⼀体的综合调度系统,如何打造⼀套健壮的、适应不同场景的系统,技术选型尤其重要。
针对以上场景我们需要我们的分布式任务系统具备以下能⼒:1.⽀持多种作业类型(shell作业/Java作业)2.⽀持作业HA,负载均衡和失败转移3.⽀持弹性扩容(应对开门红以及促销活动)4.⽀持Job Timeout 处理5.⽀持统⼀监控和告警6.⽀持作业统⼀配置7.⽀持资源隔离和作业隔离2.定时任务调度的特点任务调度就是设点某⼀时间点⾃动触发的任务,该任务可以在时间规律上去循环执⾏。
⼀般的技术quartz、spring task、java.util.Timer,这⼏种如果在单⼀机器上跑其实问题不⼤,但是如果⼀旦应⽤于集群环境做分布式部署,就会带来⼀个致命的问题,那就是重复执⾏,当然解决⽅案有,但是必须依赖数据库,将任务执⾏状态持久化下来。
特点:时间驱动:系统⼀般可以通过时间来驱动,定时定点定次。
批量处理:批量处理堆积的数据更加⾼效,在不需要实时性的情况下⽐消息中间件更有优势。
⽽且有的业务逻辑只能批量处理。
如对账批处理、资⾦管理系统回盘、部分银⾏的报盘前的制盘⾮实时性:定时任务不要求实时性,⼀般不⽤于C端⽤户的交互,更多的⽤于业务数据的处理隔离性/专⼀性:可以跟其他系统分离,只关注业务数据的处理,不影响⽤户的操作和⽤户系统的性能。
基本原理:3.开源定时任务框架Quartz:Java事实上的定时任务标准。
但Quartz关注点在于定时任务⽽⾮数据,并⽆⼀套根据数据处理⽽定制化的流程。
介绍⼀种很好⽤的任务调度平台1 总体设计分布式任务调度平台是什么XXL-JOB是⼀个轻量级分布式任务调度平台,和quartz相似,但是XXL-JOB将调度中⼼与执⾏器解耦,弥补了quartz的不⾜(使⽤API⽅式操作任务,不⼈性化;系统侵⼊性严重等)其核⼼设计⽬标是开发迅速、学习简单、轻量级、易扩展。
现已开放源代码并接⼊多家公司线上产品线,开箱即⽤。
⽂档我这边可以给。
源码⽬录介绍/xxl-job-admin :调度中⼼,项⽬源码/xxl-job-core :公共Jar依赖/xxl-job-executor-samples :执⾏器,Sample⽰例项⽬(⼤家可以在该项⽬上进⾏开发,也可以将现有项⽬改造-⽣成“调度数据库”配置XXL-JOB调度模块基于Quartz集群实现,其“调度数据库”是在Quartz的11张集群mysql表基础上扩展⽽成。
XXL-JOB⾸先定制了Quartz原⽣表结构前缀(XXL_JOB_QRTZ_)。
我们代码配置和源码配置⼀样在此基础上新增了⼏张张扩展表。
正常情况下总共16张表所有表(若想详细了解可以查看⽂档):架构设计设计思想“调度中⼼”负责发起调度请求。
“执⾏器”负责接收调度请求并执⾏对应的JobHandler 中业务逻辑。
系统组成调度模块(调度中⼼)负责管理调度信息,按照调度配置发出调度请求,⾃⾝不承担业务代码。
调度系统与任务解耦,提⾼了系统可⽤性和稳定性,同时调度系统性能不再受限于任务模块;⽀持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE 开发和任务报警等,所有上述操作都会实时⽣效,同时⽀持监控调度结果以及执⾏⽇志,⽀持执⾏器Failover 。
- XXL_JOB_QRTZ_TRIGGER_GROUP :执⾏器信息表,维护任务执⾏器信息;- XXL_JOB_QRTZ_TRIGGER_REGISTRY :执⾏器注册表,维护在线的执⾏器和调度中⼼机器地址信息;- XXL_JOB_QRTZ_TRIGGER_INFO :调度扩展信息表: ⽤于保存XXL-JOB 调度任务的扩展信息,如任务分组、任务名、机器地址、执⾏器、执⾏⼊参和报警邮件等等;- XXL_JOB_QRTZ_TRIGGER_LOG :调度⽇志表: ⽤于保存XXL-JOB 任务调度的历史信息,如调度结果、执⾏结果、调度⼊参、调度机器和执⾏器等等;- XXL_JOB_QRTZ_TRIGGER_LOGGLUE :任务GLUE ⽇志:⽤于保存GLUE 更新历史,⽤于⽀持GLUE 的版本回溯功能;执⾏模块(执⾏器)负责接收调度请求并执⾏任务逻辑。
xxljob分片原理XXLJob是一款分布式作业调度系统,它可以实现分片作业,可以有效地提高工作效率,解决大型复杂作业调度问题。
本文将详细介绍XXLJob分片原理,带领大家了解XXLJob分片调度技术。
1、XXLJob分片介绍XXLJob分片,也称分片调度,是一种用于对工作进行分片的调度技术。
它可以将一个大型的或者复杂的作业拆分成多个工作片段,每一个片段都可以单独调度和执行,从而实现工作的并行处理。
XXLJob分片主要用于批量数据处理和其他计算任务,它可以高效地处理大量数据和高容量任务,降低工作量和完成任务的时间。
XXLJob分片调度技术支持多种作业类型,如实时作业、定时作业、周期性作业等,它的主要特点是将单个作业拆分成多个片段,支持多种数据源,提供可靠的作业调度服务,支持多台机器调度,可以实现跨机器的分布式作业处理,分片数量可配置,支持拆分结果反馈,进程安全性等。
2、XXLJob分片原理XXLJob分片原理可以分为两部分:拆分原理和调度原理。
拆分原理:在XXLJob分片原理中,拆分作业是指将一个大型的或者复杂的作业拆分成多个片段,每一个片段可以单独调度和执行,从而实现作业的并行处理。
XXLJob拆分原理基于数据类型,由数据源提供数据,不同的数据源拆分算法也不同,例如,如果数据源是数据库,可以通过计算每个分片范围的数据量来实现拆分;而如果数据源是文件,则可以通过计算文件大小以及分片数量来实现拆分。
调度原理:在XXLJob分片原理中,调度原理指的是将作业拆分成多个片段后,如何对片段进行调度和执行。
XXLJob调度原理分为三种模式:调度模式、执行模式和结果反馈模式。
调度模式:即在调度系统中根据作业参数进行调度,调度系统可以根据作业参数的不同分配不同的调度机器,从而实现跨机器分布式作业处理。
执行模式:即根据调度结果,在调度机器上执行作业。
调度机器可以根据片段数量进行并发执行,从而实现分片作业的并行处理,在整个作业执行完后,调度机器还可以将每个片段的执行结果进行汇总,完成最终调度结果的收集和处理。
《分布式任务调度平台XXL-JOB》手册文档历史记录
目录
1:简介 (3)
2:安装 (3)
3:配置 (3)
3.1数据库准备 (4)
3.2源码准备 (5)
3.3部署准备 (5)
3.3.1 配置部署“调度中心” (5)
3.3.2 配置部署“执行器项目” (7)
4:使用 (9)
步骤一:新建任务 (9)
步骤二:“GLUE模式(Java)”任务开发 (10)
步骤三:触发执行 (10)
步骤四:查看日志 (10)
5:总结 (11)
1:简介
XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展,XXL-JOB是基于开源Quartz 调度内核的、为方便企业调度场景而开源的一款实用的调度工具。
自带任务配置页面,任务监控,分布式执行器等功能。
2:安装
下载地址(最新1.9版本迭代中,可选择稳定版本1.8.2下载)
码云:https:///xuxueli0323/xxl-job/tree/v1.8.2
3:配置
解压下载文件,得到如下文件结构,
- /doc :文档资料
- /db :“调度数据库”建表脚本
- /xxl-job-admin :调度中心,项目源码
- /xxl-job-core :公共Jar依赖
- /xxl-job-executor-samples :执行器,Sample示例项目
3.1数据库准备
使用mysql 新建数据库xxl-job ,导入下载文件夹中/doc/db/tables_xxl_job.sql 文件,应生成16张表,如图所示。
3.2源码准备
按照maven格式将源码导入IDE,使用maven进行编译即可,源码结构如下
xxl-job-admin:调度中心
xxl-job-core:公共依赖
xxl-job-executor:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
:xxl-job-executor-sample-spring:Spring版本,通过Spring容器管理执行器,比较通用;
:xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器;
:xxl-job-executor-sample-jfinal:JFinal版本,通过JFinal管理执行器;
:xxl-job-executor-sample-nutz:Nutz版本,通过Nutz管理执行器;
3.3部署准备
3.3.1 配置部署“调度中心”
调度中心项目:xxl-job-admin
作用:统一管理任务调度平台上调度任务,负责触发调度执行,并且提供任务管理平台。
步骤一:调度中心配置
文件地址:
/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties,数据库连接地址与上面所创建数据库的地址要一致。
步骤二:部署项目
可将项目编译的war包部署到tomcat中,现将war部署到192.168.110.2 服务器上将war包复制到/root/apache-tomcat-7.0.78/webapps 目录下。
启动tomcat,游览器输入http://192.168.110.2:8080/xxl-job-admin/
3.3.2 配置部署“执行器项目”
“执行器”项目:xxl-job-executor-sample-spring (提供多种版本执行器供选择,现以Spring 版本为例,可直接使用,也可以参考其并将现有项目改造成执行器)
作用:负责接收“调度中心”的调度并执行;可直接部署执行器,也可以将执行器集成到现有业务项目中。
步骤一:maven依赖
确认pom文件中引入了"xxl-job-core" 的maven依赖;
步骤二:执行器配置
文件地址:
/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/xxl-job -executor.properties 如tomcat端口占用,可将xxl.job.executor.port改成9888
步骤三:执行器组件配置
文件地址:
/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-spring/src/main/resources/applica tioncontext-xxl-job.xml
步骤四:部署执行器项目
同“调度中心”war一致复制到/root/apache-tomcat-7.0.78/webapps 目录下,启动tomcat
4:使用
本示例以新建一个“GLUE模式(Java)” 运行模式的任务为例。
(“GLUE模式(Java)”的执行代码托管到调度中心在线维护,相比“Bean模式任务”需要在执行器项目开发部署上线,更加简便轻量)
前提:请确认“调度中心”和“执行器”项目已经成功部署并启动;
步骤一:新建任务
登录调度中心,点击下图所示“新建任务”按钮,新建示例任务。
然后,参考下面截图中任务的参数配置,点击保存,Cron表达式,例如0 0/1 * * * ? 每一分钟执行一次。
步骤二:“GLUE模式(Java)”任务开发
请点击任务右侧“GLUE” 按钮,进入“GLUE编辑器开发界面” ,见下图。
“GLUE模式(Java)” 运行模式的任务默认已经初始化了示例任务代码,即打印“XXL-JOB, Hello World. 2018-03-27/xuya”
步骤三:触发执行
请点击任务右侧“执行” 按钮,可手动触发一次任务执行
步骤四:查看日志
请点击任务右侧“日志” 按钮,可前往任务日志界面查看任务日志。
在任务日志界面中,可查看该任务的历史调度记录以及每一次调度的任务调度信息、执行参数和执行信息。
运行中的任务点击右侧的“执行日志”按钮,可进入日志控制台查看实时执行日志。
精品文档
在日志控制台,可以Rolling方式实时查看任务在执行器一侧运行输出的日志信息,实时监控任务进度;
5:总结
XXL-JOB将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。
将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。
因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性。
附上XXL-JOB架构图:
可编辑。