1. Elastic-Job介绍
Elastic-Job是当当网开源的一个分布式调度解决方案,基于Quartz二次开发的,由两个相互独立的子项目ElasticJob-Lite
和Elastic-Job-Cloud
组成。Elastic-Job-Lite
,它定位为轻量级无中心化解决方案,使用Jar包的形式提供分布式任务的协调服务,而Elastic-Job-Cloud
子项目需要结合 Mesos 以及Docker在云环境下使用。
Elastic-Job的github地址∶https://github.com/elasticjob
1.1 主要功能
分布式调度协调
在分布式环境中,任务能够按指定的调度策略执行,并且能够避免同一任务多实例重复执行丰富的调度策略
基于成熟的定时任务作业框架Quartz cron表达式执行定时任务弹性扩容缩容
当集群中增加某一个实例,它应当也能够被选举并执行任务;当集群减少一个实例时,它所执行的任务能被转移到别的实例来执行。失效转移
某实例在任务执行失败后,会被转移到其他实例执行错过执行作业重触发
若因某种原因导致作业错过执行,自动记录错过执行的作业,并在上次作业完成后自动触发。支持并行调度
支持任务分片,任务分片是指将一个任务分为多个小任务项在多个实例同时执行。作业分片一致性
当任务被分片后,保证同一分片在分布式环境中仅一个执行实例。
2. Elastic-Job-Lite应用
Elastic-Job依赖于Zookeeper进行分布式协调,所以需要安装Zookeeper软件(3.4.6版本以上)
2.1 安装Zookeeper
- 在linux平台解压下载的zookeeper-3.6.2-bin.tar.gz
- 进入conf目录,
cp zoo_sample.cfg zoo.cfg
- 进入bin目录,启动zk服务
#启动
./zkServer.sh start
#停止
./zkServer.sh stop
#查看状态
./zkServer.sh status
- Zookeeper的树形节点结构图
2.2 引入相关 jar 包
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-lite-core</artifactId>
<version>2.1.5</version>
</dependency>
2.3 定时任务实例
- 需求:每隔两秒钟执行一次定时任务(resume表中未归档的数据归档到resume_bak表中,每次归档1条记录)
- resume_bak 和 resume表结构完全一样
- resume表中数据归档之后不删除,只将state置为"已归档"
- 表结构
-- ----------------------------
-- Table structure for resume
-- ----------------------------
DROP TABLE IF EXISTS `resume`;
CREATE TABLE `resume` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`sex` varchar(255) DEFAULT NULL,
`phone` varchar(255) DEFAULT NULL,
`address` varchar(255) DEFAULT NULL,
`education` varchar(255) DEFAULT NULL,
`state` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8;
SET FOREIGN_KEY_CHECKS = 1;
2.4 程序开发
- 定时任务类
package com.study;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.study.utils.JdbcUtil;
import java.util.List