當(dāng)啟動一個定時任務(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)容進(jìn)行啟動;
- 在這些配置中有一些是必有的配置:
- 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;
- 當(dāng)啟動一個ElasticJobLite的作業(yè)常侣,就需要一個LiteJobConfiguration對象弹渔,需要注意的是,每個定時任務(wù)對應(yīng)一個LiteJobConfiguration對象舞肆,上面所說的配置博杖,都是針對一個定時任務(wù),或者說一個作業(yè)而言的压状;
- 調(diào)度器啟動(也就是JobScheduler類的init方法)需要三個必要條件跟继,注冊中心,配置對象娱两,事件總線金吗,完成這些就可以啟動一個作業(yè)摇庙;