jsdisabled属性
datax定时执⾏多个job_3千字带你搞懂XXL-JOB任务调度平台
思维导图
⽂章已收录Github精选,欢迎Star: github/yehongzhi/le arningSummary
⽂章已收录Github精选,欢迎Star
⼀、概述
在平时的业务场景中,经常有⼀些场景需要使⽤定时任务,⽐如:
时间驱动的场景:某个时间点发送优惠券,等等。
批量处理数据:批量统计上个⽉的账单,统计上个⽉销售数据等等。
固定频率的场景:每隔5分钟需要执⾏⼀次。
所以定时任务在平时开发中并不少见,⽽且对于现在快速消费的时代,每天都需要发送各种推送,消息都需要依赖定时任务去完成,应⽤⾮常⼴泛。
⼆、为什么需要任务调度平台
在Java中,传统的定时任务实现⽅案,⽐如Timer,Quartz等都或多或少存在⼀些问题:
不⽀持集、不⽀持统计、没有管理平台、没有失败报警、没有监控等等
⽽且在现在分布式的架构中,有⼀些场景需要分布式任务调度:
同⼀个服务多个实例的任务存在互斥时,需要统⼀的调度。
任务调度需要⽀持⾼可⽤、监控、故障告警。
需要统⼀管理和追踪各个服务节点任务调度的结果,需要记录保存任务属性信息等。
显然传统的定时任务已经不满⾜现在的分布式架构,所以需要⼀个分布式任务调度平台,⽬前⽐较主流的是elasticjob和xxl-job。elasticjob由当当⽹开源,⽬前github有6.5k的Star,使⽤的公司在官⽹登记有76家。
elasticjob是采⽤zookeeper实现分布式协调,实现任务⾼可⽤以及分⽚。
跟xxl-job不同的是,elasticjob是采⽤zookeeper实现分布式协调
三、为什么选择XXL-JOB
xxl-job的github上有15.7k个star,登记公司有348个。毫⽆疑问elasticjob和xxl-job都是⾮常优实际上更多公司选择xxl-job,⽬前xxl-job的github上有15.7k个star,登记公司有348个
秀的技术框架,接下来我们进⼀步对⽐讨论,探索⼀下为什么更多公司会选择xxl-job。
⾸先先介绍⼀下xxl-job,这是出⾃⼤众点评许雪⾥(xxl就是作者名字的拼⾳⾸字母)的开源项⽬,官⽹上介绍这是⼀个轻量级分布式任务调度框架,其核⼼设计⽬标是开发迅速、学习简单、轻量级、易扩展。跟elasticjob不同,xxl-job环境依赖于mysql,不⽤ZooKeeper,这也是最⼤的不同。
elasticjob的初衷是为了⾯对⾼并发复杂的业务,即使是在业务量⼤,服务器多的时候也能做好任务调度,尽可能的利⽤服务器的资源。使⽤ZooKeeper使其具有⾼可⽤、⼀致性的,⽽且还具有良好的扩展性。官⽹上写elasticjob是⽆中⼼化的,通过ZooKeeper的选举机
elasticjob是⽆中⼼化的,通过ZooKeeper的选举机制选举出主服务器,如果主服务器挂了,会重新选举新的主服务器。因此elasticjob具有良好的扩展性和可⽤性,但是使⽤和运维有⼀定的复杂。
有⼀定的复杂
xxl-job则相反,是通过⼀个中⼼式的调度平台,调度多个执⾏器执⾏任务,调度中⼼通过DB锁保证集分布式调度的⼀致性,这样扩展执⾏器会增⼤DB的压⼒,但是如果实际上这⾥数据库只是负责任务的调度执⾏。但是如果没有⼤量的执⾏器的话和任务的情况,是不会造成数据库压⼒的。实际上⼤部分公司任务数,执⾏器并不多(虽然⾯试经常会问⼀些⾼并发的问题)。
轻量级,开箱即⽤,操作简易,上⼿快,与SpringBoot有⾮常好的集成,⽽且监控界⾯就集成在相对来说,xxl-job中⼼式的调度平台轻量级,开箱即⽤,操作简易,上⼿快,与SpringBoot有⾮常好的集成
企业维护起来成本不⾼,还有失败的邮件告警等等。这就使很多企业选择xxl-job做调度平台。
调度中⼼,界⾯⼜简洁,对于企业维护起来成本不⾼,还有失败的邮件告警
四、安装
4.1 拉取源码
搭建xxl-job很简单,有docker拉取镜像部署和源码编译两种⽅式,docker部署的⽅式⽐较简单,我就讲源码编译的⽅式。⾸先到github拉取xxl-job源码到本地。
4.2 导⼊IDEA
拉取源码下来后,可以看到项⽬结构,如下:
导⼊到IDEA,配置⼀下Maven,下载相关的jar包,稍等⼀下后,就可以看到这样的项⽬:
4.3 初始化数据库
前⾯讲过xxl-job需要依赖mysql,所以需要初始化数据库,在xxl-jobdocdb路径下到tables_xxl_job.sql⽂件。在mysql上运⾏sql⽂件。
4.4 配置⽂件
接着就改⼀下配置⽂件,在admin项⽬下到application.properties⽂件。
### 调度中⼼JDBC链接
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai spring.datasource.username=root
spring.datasource.password=
basic parameters
spring.datasource.sql.jdbc.Driver
### 报警邮箱
spring.mail.host=smtp.qq
spring.mail.port=25
spring.mail.username=xxx@qq
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.able=true
spring.mail.properties.mail.quired=true合肥黑马培训班怎么样
redis为什么要持久化spring.mail.properties.mail.smtp.socketFactory.class=javax.ssl.SSLSocketFactory
### 调度中⼼通讯TOKEN [选填]:⾮空时启⽤;
xxl.job.accessToken=
### 调度中⼼国际化配置 [必填]:默认为 "zh_CN"/中⽂简体, 可选范围为 "zh_CN"/中⽂简体, "zh_TC"/中⽂繁体 and "en"/英⽂;
xxl.job.i18n=zh_CN
## 调度线程池最⼤线程配置【必填】
iggerpool.fast.max=200
properties是什么文件iggerpool.slow.max=100
### 调度中⼼⽇志表数据保存天数 [必填]:过期⽇志⾃动清理;限制⼤于等于7时⽣效,否则, 如-1,关闭⾃动清理功能;
xxl.job.logretentiondays=10
4.5 编译运⾏
简单⼀点直接跑admin项⽬的main⽅法启动也⾏。
如果部署在服务器呢,那我们需要打包成jar包,在IDEA利⽤Maven插件打包。
然后在xxl-jobxxl-job-admintarget路径下,到jar包。
然后就得到jar包了,使⽤java -jar命令就可以启动了。
五、永远的HelloWord
部署了调度中⼼之后,需要往调度中⼼注册执⾏器,添加调度任务。接下来就参考xxl-job写⼀个简单的例⼦。⾸先创建⼀个SpringBoot项⽬,名字叫"xxljob-demo",添加依赖。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency><!-- 官⽹的demo是2.2.1,中央maven仓库还没有,所以就⽤2.2.0 -->
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.2.0</version>
c语言ui</dependency>
</dependencies>
接着修改application.properties。