定时任务调度框架介绍
单机
- Timer:这是 java 自带的 java.util.Timer 类,这个类允许你调度一个 java.util.TimerTask 任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。
- ScheduledExecutorService:也 jdk 自带的一个类;是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。
- Spring Task:Spring3.0 以后自带的 task,配置简单功能较多,如果系统使用单机的话可以优先考虑spring定时器。
分布式
- Quartz:Java事实上的定时任务标准。但Quartz关注点在于定时任务而非数据,并无一套根据数据处理而定制化的流程。虽然Quartz可以基于数据库实现作业的高可用,但缺少分布式并行调度的功能。
- TBSchedule:阿里早期开源的分布式任务调度系统。代码略陈旧,使用timer而非线程池执行任务调度。众所周知,timer在处理异常状况时是有缺陷的。而且TBSchedule作业类型较为单一,只能是获取/处理数据一种模式。还有就是文档缺失比较严重。
- elastic-job:当当开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,实现任务高可用以及分片,并且可以支持云开发。
- Saturn:是唯品会自主研发的分布式的定时任务的调度平台,基于当当的elastic-job 版本1开发,并且可以很好的部署到docker容器上。
- xxl-job: 是大众点评员工徐雪里于2015年发布的分布式任务调度平台,是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展,其在唯品会内部已经发部署350+个节点,每天任务调度4000多万次。同时,管理和统计也是它的亮点。使用案例 大众点评、易信(IM)、京东(电商系统)、360金融(金融系统)、易企秀、随行付(支付系统)、优信二手车。
我们项目选择:XXL-JOB
分布式任务调度平台XXL-JOB
官方文档:https://www.xuxueli.com/xxl-job/
概述
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
XXL-JOB入门案例
下载XXL-JOB示例代码,解压,使用idea打开
http://gitee.com/xuxueli0323/xxl-job
创建XXL-JOB使用数据库和相关表
- xxl-job-admin,调度中心,核心,负责调度任务,触发,统一管理的平台
部署调度中心
- 修改xxl-job-admin项目里面配置文件
-
启动调度中心
-
通过路径访问:http://localhost:8080/xxl-job-admin
-
默认用户名和密码: admin/123456
部署执行器项目
要做的具体业务(事情)
- 引入相关依赖
- 修改配置文件,把执行器项目在调度中心进行注册
# web port
server.port=8281
### 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin
### 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxl.job.executor.appname=xxl-job-executor-sample
### 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
# log config
logging.config=classpath:logback.xml
### 执行器通讯TOKEN [选填]:非空时启用;
xxl.job.accessToken=
xxl.job.executor.address=
### 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxl.job.executor.ip=
### 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.port=9999
### 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxl.job.executor.logpath=C:\\tingshu
### 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
xxl.job.executor.logretentiondays=30
- 注册到调度中心里面
开发执行器项目job方法
创建任务并启动任务
- 通过图形化界面方式进行操作(也可以使用代码来指定定时任务)
- 新增任务
科学合理分工太难了,那不成计划经济了吗?科学合理的就不可能有重复资源的说法。市场经济允许有重复研究、允许浪费,就是让大家有一个竞赛关系。多个模块的研究,在竞争中有可能小模块把大模块就吃掉了,那我们就承认小模块的领导地位,由他来整合资源。干部任期制、专家循环制、大家讨论的学习平台……,部门“围墙”就逐渐被拆掉了。现在我们开放讨论,在讨论中思辨,在思辨中学习,看大家讨论的内容也是学习。
https://baijiahao.baidu.com/s?id=1760664270073856317&wfr=spider&for=pc
擦亮花火、共创未来——任正非在“难题揭榜”花火奖座谈会上的讲话
任正非