分布式定时任务使用说明
分布式定时任务依赖于Elastic-Job
,官方文档:http://elasticjob.io/docs/elastic-job-lite/00-overview/
为了更简单的使用Elastic-Job
分布式定时任务,我们对此框架进行了封装。
引入定时任务
<dependency>
<groupId>com.wueasy</groupId>
<artifactId>wueasy-task</artifactId>
<version>RELEASE</version>
</dependency>
开发一个简单的任务
开发任务请参考官方地址:http://elasticjob.io/docs/elastic-job-lite/01-start/dev-guide/
package com.wueasy.demo.task;
import java.util.Date;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.wueasy.base.util.DateHelper;
/**
*
* @author: fallsea
* @version 1.0
*/
public class DemoJob implements SimpleJob{
@Override
public void execute(ShardingContext shardingContext) {
System.err.println("----------------------"+DateHelper.formatDate(new Date(),DateHelper.PATTERN_DATE_TIME));
}
}
配置注册中心
分布式定时任务需要zookeeper
注册中心支持,参考如下:
wueasy:
#zookeeper注册中心地址
zk :
servers : 127.0.0.1:2181
sessionTimeout : 3000
connectionTimeout : 5000
配置任务
定时任务开发完成后,需要配置任务执行的规则。
wueasy:
task: #定时任务
job: #任务列表
demoJob: #任务名称,唯一
jobClass: com.wueasy.demo.task.DemoJob
cron: "0/10 * * * * ?"
属性 | 必输 | 默认值 | 描述 | |
---|---|---|---|---|
jobType | 是 | simple |
任务类型 simple ,dataflow ,script |
|
jobClass | 是 | 作业实现类 | ||
cron | 是 | cron 表达式,用于控制作业触发时间 |
||
description | 是 | 作业描述信息 | ||
shardingTotalCount | 否 | 1 |
作业分片总数,默认1 |
|
shardingItemParameters | 否 | 分片序列号和参数用等号分隔,多个键值对用逗号分隔;分片序列号从0开始,不可大于或等于作业分片总数。如:0=a,1=b,2=c |
||
jobParameter | 否 | 作业自定义参数;作业自定义参数,可通过传递该参数为作业调度的业务方法传参,用于实现带参数的作业;例:每次获取的数据量、作业实例从数据库读取的主键等 | ||
failover | 否 | false |
是否开启任务执行失效转移,开启表示如果作业在一次任务执行中途宕机,允许将该次未完成的任务在另一作业节点上补偿执行 | |
misfire | 否 | false |
是否开启错过任务重新执行 | |
monitorExecution | 否 | true |
监控作业运行时状态;每次作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率。因为是瞬时状态,所以无必要监控。请用户自行增加数据堆积监控。并且不能保证数据重复选取,应在作业中实现幂等性。;每次作业执行时间和间隔时间均较长的情况,建议监控作业运行时状态,可保证数据不会重复选取。 | |
maxTimeDiffSeconds | 否 | -1 |
最大允许的本机与注册中心的时间误差秒数;如果时间误差超过配置秒数则作业启动时将抛异常;配置为-1表示不校验时间误差 | |
monitorPort | 否 | -1 |
作业监控端口;建议配置作业监控端口, 方便开发者dump作业信息。使用方法: `echo "dump" | nc 127.0.0.1 9888` |
jobShardingStrategyClass | 否 | 作业分片策略实现类全路径,默认使用平均分配策略 http://elasticjob.io/docs/elastic-job-lite/02-guide/job-sharding-strategy/ |
||
disabled | 否 | false |
作业是否禁止启动;可用于部署作业时,先禁止启动,部署结束后统一启动 | |
overwrite | 否 | false |
本地配置是否可覆盖注册中心配置;如果可覆盖,每次启动作业都以本地配置为准 | |
reconcileIntervalMinutes | 否 | 10 |
修复作业服务器不一致状态服务调度间隔时间,配置为小于1的任意值表示不执行修复;单位:分钟 | |
streamingProcess | 否 | false |
是否流式处理数据;如果流式处理数据, 则fetchData不返回空结果将持续执行作业;如果非流式处理数据, 则处理数据完成后作业结束 | |
scriptCommandLine | 否 | 脚本型作业执行命令行 | ||
eventTracking | 否 | false |
事件追踪是否启用 |
事件追踪
Elastic-Job提供了事件追踪功能,可通过事件订阅的方式处理调度过程的重要事件,用于查询、统计和监控。Elastic-Job目前提供了基于关系型数据库两种事件订阅方式记录事件。
引入数据库jar包
<dependency>
<groupId>com.wueasy</groupId>
<artifactId>wueasy-database-client</artifactId>
<version>${wueasy.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
- 1.配置定时任务启用追踪功能
wueasy.task.job.*.eventTracking = true
,每个任务需要单独配置 - 2.配置定时任务数据库,数据源必须是
task
wueasy:
task:
job:
demoJob:
jobClass: com.wueasy.demo.task.DemoJob
cron: "0/10 * * * * ?"
eventTracking: true
datasource :
task : #定时任务数据源
connection:
url : jdbc:mysql://localhost:3306/easy_data?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
username : easyadmin
password : easyadmin
#连接池配置
initialSize : 10 #初始化大小
minIdle : 10 #最小连接
maxActive : 20 #最大连接
maxWait : 60000 #配置获取连接等待超时的时间
timeBetweenEvictionRunsMillis : 2000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
minEvictableIdleTimeMillis : 600000 #配置一个连接在池中最小生存的时间,单位是毫秒
maxEvictableIdleTimeMillis : 600000 #配置一个连接在池中最大生存的时间,单位是毫秒
validationQuery : SELECT 1 from dual
testWhileIdle : true
testOnBorrow : false
testOnReturn : false
keepAlive : true