當啟動一個定時任務(wù)的時候,必然是需要眾多的配置,然后調(diào)度器的構(gòu)造函數(shù)中必然要傳入這個配置對象,這樣調(diào)度器才能知道具體要跑什么任務(wù),以怎樣的方式跑,那接下來,就來看看ElasticJob的配置接口的設(shè)計;
1,頂層配置接口-JobRootConfiguration
public interface JobRootConfiguration {
JobTypeConfiguration getTypeConfig();
}
- 這個接口異常異常簡單,只是為了獲取JobTypeConfiguration對象;
- JobTypeConfiguration接口被獨立成一個接口的原因是,ElasticJob有三種不同的作業(yè)類型,simple,script,dataflow,他們的實現(xiàn)方式有差異,所以需要被獨立出來;
2,作業(yè)類型配置接口-JobTypeConfiguration
public interface JobTypeConfiguration {
JobType getJobType();
String getJobClass();
JobCoreConfiguration getCoreConfig();
}
- 作業(yè)類型配置接口,也只有三個方法,getJobType是為了獲取作業(yè)類型,就是上面提到的三種類型,他們被定義成了枚舉;
- getJobClass是為了獲取作業(yè)實現(xiàn)類,需要的是類的全限定名,他是真正的作業(yè)邏輯;
- 最后getCoreConfig獲取的是核心配置類,該配置類又被抽成一個獨立的接口,是因為對三種作業(yè)類型而言,他們是配置類的公共部分,可以減少代碼重復(fù);
3,作業(yè)核心配置接口-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所需要的核心配置;
- 等調(diào)度器啟動的時候,會根據(jù)以上三個接口中所定義的配置內(nèi)容進行啟動;
- 在這些配置中有一些是必有的配置:
- jobName:該作業(yè)的名稱;
- cron:作業(yè)調(diào)度的時機;
- shardingTotalCount:總分片數(shù);
- shardingItemParameters:分片序號和個性化參數(shù)對照,形如:0=a,1=b,2=c
4,具體實現(xiàn)類-LiteJobConfiguration
這是ElasticJobLite對配置接口JobRootConfiguration的實現(xiàn),并向其中增加了部分配置項;
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的作業(yè),就需要一個LiteJobConfiguration對象,需要注意的是,每個定時任務(wù)對應(yīng)一個LiteJobConfiguration對象,上面所說的配置,都是針對一個定時任務(wù),或者說一個作業(yè)而言的;
- 調(diào)度器啟動(也就是JobScheduler類的init方法)需要三個必要條件,注冊中心,配置對象,事件總線,完成這些就可以啟動一個作業(yè);