当启动一个定时任务时,必然需要众多的配置(例如:触发时间、业务运行逻辑,具体根据项目业务场景进行抽象,提供共用配置项),然后调度器的构造函数中必然要传入这个配置对象,调度器才能知道具体运行什么业务,以怎样的方式运行,接下来简述Elastic-Job-Lite作业配置。
1,本文主要讲述Elastic-Job-Lite作业配置
涉及主要类的类图如下图所示:
1,JobRootConfiguration配置接口
/**
* 作业配置根接口.
*/
public interface JobRootConfiguration {
/**
* 获取作业类型配置.
* @return作业类型配置
*/
JobTypeConfiguration getTypeConfig();
}
①此接口提供获取JobTypeConfiguration对象
②JobTypeConfiguration抽象成为一个独立接口原因,ElasticJob有三种不同作业类型:simple、dataflow、script不同实现类型,所有被单独抽象出来
2,JobTypeConfiguration作业类型配置接口
/**
* 作业类型配置.
*/
public interface JobTypeConfiguration {
/**
* 获取作业类型. *
* @return作业类型
*/
JobType getJobType();
/**
* 获取作业实现类名称. *
* @return作业实现类名称
*/
String getJobClass();
/**
* 获取作业核心配置. *
* @return作业核心配置
*/
JobCoreConfiguration getCoreConfig();
}
①getJobType()获取作业类型,JobType枚举类,目前定义3种类型SIMPLE、DATAFLOW、SCRIPT
②getJobClass()获取作业实现类名称,作业业务逻辑类全限定名路径,其中ScriptJobConfiguration获取的是io.elasticjob.lite.api.script. ScriptJob全限定名路径
③getCoreConfig()获取作业核心配置信息,该配置抽象成独立的JobCoreConfiguration类,是因为三种不同作业类型共要的公共属性
3, JobTypeConfiguration接口三种作业类型实现类
配置实现 | 作业类型 | 说明 |
SimpleJobConfiguration | simple | 简单作业 |
ScriptJobConfiguration | script | 脚本作业,例如:shell |
DataflowJobConfiguration | dataflow | 数据流作业 |
4,JobCoreConfiguration作业核心配置
/**
* 作业核心配置.
*/
public final class JobCoreConfiguration{
//作业名称
private final String jobName;
//cron表达式,用于控制作业触发时间
private final String cron;
//作业分片总数
private final int shardingTotalCount;
//分片***和参数用等号分隔,多个键值对用逗号分隔
//分片***从0开始,不可大于或等于作业分片总数
private final String shardingItemParameters;
//作业自定义参数
//作业自定义参数,可通过传递该参数为作业调度的业务方法传参,用于实现带参数的作业
private final String jobParameter;
//是否开启任务执行失效转移,开启表示如果作业在一次任务执行中途宕机,
//允许将该次未完成的任务在另一作业节点上补偿执行
private final boolean failover;
//是否开启错过任务重新执行
private final boolean misfire;
//作业描述信息
private final String description;
//配置jobProperties定义的枚举控制Elastic-Job的实现细节
//JOB_EXCEPTION_HANDLER用于扩展异常处理类
//EXECUTOR_SERVICE_HANDLER用于扩展作业处理线程池类
private final JobProperties jobProperties;
}
①以上是JobCoreConfiguration类定义了作业核心配置属性,他定义一个ElasticJob所需要核心配置。
③关键属性
jobName:作业名称
cron:cron表达式,用于控制作业触发时间
shardingTotalCount:作业分片总数
shardingItemParameters:分片***和参数
5,LiteJobConfiguration Lite作业配置
/**
* Lite作业配置.
*/
public final class LiteJobConfiguration implements JobRootConfiguration {
//JobTypeConfiguration接口被独立成一个接口的原因是,ElasticJob有三种不同的作业
//类型,simple,script,dataflow,他们的实现方式有差异,所以需要被独立出来
private final JobTypeConfiguration typeConfig;
//监控作业运行时状态,默认值true
private final boolean monitorExecution;
//最大允许的本机与注册中心的时间误差秒数
//如果时间误差超过配置秒数则作业启动时将抛异常
//配置为-1表示不校验时间误差
private final int maxTimeDiffSeconds;
//作业监控端口
//建议配置作业监控端口, 方便开发者dump作业信息
//使用方法: echo “dump” | nc 127.0.0.1 9888
private final int monitorPort;
//作业分片策略实现类全路径
//默认使用平均分配策略
private final String jobShardingStrategyClass;
//修复作业服务器不一致状态服务调度间隔时间,配置为小于1的任意值表示不执行修复
//单位:分钟
private final int reconcileIntervalMinutes;
//设置作业是否启动时禁止.
//可用于部署作业时, 先在启动时禁止, 部署结束后统一启动
//默认值:false
private final boolean disabled;
//本地配置是否可覆盖注册中心配置
//本地配置是否可覆盖注册中心配置
//默认值:false
private final boolean overwrite;
}
①LiftJobConfiguration是ElasticJob具体配置实现类
②每创建一个ElasticJob作业,必须创建一个LiftJobConfiguration对象,每个定时任务对应一个LiftJobConfiguration对象。