当启动一个定时任务的时候,必然是需要众多的配置,然后调度器的构造函数中必然要传入这个配置对象,这样调度器才能知道具体要跑什么任务,以怎样的方式跑,那接下来,就来看看ElasticJob的配置接口的设计;
1,顶层配置接口-JobRootConfiguration
public interface JobRootConfiguration {
JobTypeConfiguration getTypeConfig();
}
- 这个接口异常异常简单,只是为了获取JobTypeConfiguration对象;
- JobTypeConfiguration接口被独立成一个接口的原因是,ElasticJob有三种不同的作业类型,simple,script,dataflow,他们的实现方式有差异,所以需要被独立出来;
2,作业类型配置接口-JobTypeConfiguration
public interface JobTypeConfiguration {
JobType getJobType();
String getJobClass();
JobCoreConfiguration getCoreConfig();
}
- 作业类型配置接口,也只有三个方法,getJobType是为了获取作业类型,就是上面提到的三种类型,他们被定义成了枚举;
- getJobClass是为了获取作业实现类,需要的是类的全限定名,他是真正的作业逻辑;
- 最后getCoreConfig获取的是核心配置类,该配置类又被抽成一个独立的接口,是因为对三种作业类型而言,他们是配置类的公共部分,可以减少代码重复;
3,作业核心配置接口-JobCoreConfiguration
private final String jobName;
private final String cron;
private final int shardingTotalCount;
private final String shardingItemParameters;
private final String jobParameter;
private final boolean failover;
private final boolean misfire;
private final String description;
private final JobProperties jobProperties;
- 上面的字段是核心配置接口中包含的属性,他定义了一个ElasticJob所需要的核心配置;
- 等调度器启动的时候,会根据以上三个接口中所定义的配置内容进行启动;
- 在这些配置中有一些是必有的配置:
- jobName:该作业的名称;
- cron:作业调度的时机;
- shardingTotalCount:总分片数;
- shardingItemParameters:分片序号和个性化参数对照,形如:0=a,1=b,2=c
4,具体实现类-LiteJobConfiguration
这是ElasticJobLite对配置接口JobRootConfiguration的实现,并向其中增加了部分配置项;
private final JobTypeConfiguration typeConfig;
private final boolean monitorExecution;
private final int maxTimeDiffSeconds;
private final int monitorPort;
private final String jobShardingStrategyClass;
private final int reconcileIntervalMinutes;
private final boolean disabled;
private final boolean overwrite;
- 当启动一个ElasticJobLite的作业,就需要一个LiteJobConfiguration对象,需要注意的是,每个定时任务对应一个LiteJobConfiguration对象,上面所说的配置,都是针对一个定时任务,或者说一个作业而言的;
- 调度器启动(也就是JobScheduler类的init方法)需要三个必要条件,注册中心,配置对象,事件总线,完成这些就可以启动一个作业;
网友评论