創(chuàng)建調(diào)度任務
應用發(fā)布后,您可以為應用創(chuàng)建調(diào)度任務。
操作步驟
登錄任務調(diào)度控制臺。
在左側(cè)導航欄選擇 任務配置。
選擇 添加任務 > 簡單任務,然后配置以下參數(shù):
參數(shù)
說明
任務名稱
配置任務的名稱,用于識別任務。
應用名稱
填寫或選擇目標應用名稱。
支持英文、中文、數(shù)字、下劃線(_)、短劃線(-),50 個字符之內(nèi)。必須與工程中
application.properties
文件的spring.application.name
配置的應用名稱一致。調(diào)度類型
配置任務調(diào)度的類型,可選值:
cron 表達式觸發(fā):該類型的任務在創(chuàng)建時需要配置 CRON 表達式定時觸發(fā)任務。
事件觸發(fā):該類型的任務通過外部事件觸發(fā)任務。
定時觸發(fā):該類型的任務在創(chuàng)建時也需要配置 CRON 表達式定時觸發(fā),并且只能執(zhí)行一次。
Cron 表達式
配置 CRON 表達式,用于定時觸發(fā)任務。配置方式請參見 CRON 表達式詳解。
僅在 調(diào)度類型 為 cron 表達式觸發(fā) 時配置。
任務分組(可選)
選擇或新建一個任務分組,方便歸納管理任務。
執(zhí)行器名字
必須與代碼中任務處理器名字一致,即 實現(xiàn)類 步驟中
getName
方法獲取的執(zhí)行器名字。是否分片
選擇任務是否開啟分片:
不開啟分片,任務將只調(diào)度到一臺客戶端服務器上執(zhí)行。
開啟分片,并設置分片數(shù)為 N,任務則會同時觸發(fā)到 N 臺客戶端服務器上并發(fā)執(zhí)行。
如果您開啟了分片,您還需在本地工程編碼實現(xiàn)任務分片。代碼參見下文 任務分片示例代碼 。
自定義參數(shù)(可選)
自定義參數(shù)支持從控制臺向任務傳遞參數(shù),參數(shù)也可以在任務間傳遞,格式為:
key=value
。參數(shù)配置說明如下:
參數(shù)名:設置自定義參數(shù)的名稱。
支持英文大小寫、數(shù)字、下劃線(_), 不能超過 128 字符。
類型 和 參數(shù)值:可選類型和參數(shù)值配置方式如下。
STRING:支持通用的字符串。
LIST:支持字符串數(shù)組,例如:
["aaa","bbb"]
。BOOLEAN:支持 true 或 false。
PLACEHOLDER:支持參數(shù)替換,目前支持的變量如下:
${sharding}
:替換當前分片值,配合簡單任務使用。${shardingCount}
:替換簡單任務配置的分片數(shù)。${triggerTime}
:替換預期的觸發(fā)時間。
說明您也可以在業(yè)務端通過上下文 context(該對象必須實現(xiàn) Serializable。)獲取和覆蓋自定義參數(shù)。代碼參見下文 獲取和覆蓋自定義參數(shù)示例代碼 。
路由策略
選擇執(zhí)行任務的路由策略,可選值:
隨機:每次執(zhí)行都隨機分發(fā)到客戶端服務器上。
定向:每次執(zhí)行都分發(fā)到同一個客戶端服務器上。
暫不支持指定客戶端服務器 IP。
輪詢:每次執(zhí)行依次分發(fā)到每臺客戶端服務器上。
通信方式
選擇任務的通信方式,可選值:
單向 ONEWAY:單向操作,沒有返回值。控制臺不記錄觸發(fā)記錄、無超時、無重試。
高頻非重要任務時建議使用。
回調(diào) CALLBACK:雙向操作,有返回值。控制臺可查看觸發(fā)記錄、可設置超時、可重試。
重要任務時建議使用,觸發(fā)間隔至少 5 分鐘。
任務互斥
選擇是否開啟任務互斥模式。開啟任務互斥模式時,處在“執(zhí)行中”或“暫停”狀態(tài)的任務即使已經(jīng)達到下一個任務觸發(fā)時間點,仍無法再次觸發(fā)。本次調(diào)度狀態(tài)以“跳過”標記。默認為不開啟。
僅當 通信方式 設置為 回調(diào) CALLBACK 時配置。
漏觸發(fā)策略
設置任務漏觸發(fā)時的處理策略,可選值:
忽略:不進行補償處理。
立即觸發(fā):立即重新觸發(fā)。
時間充裕時觸發(fā):是否進行補償觸發(fā)取決于下次觸發(fā)前的剩余時間是否充裕。若當前時間 + 超時時間 < 下次觸發(fā)時間,則進行補償觸發(fā),并將此次補償觸發(fā)插入觸發(fā)記錄;反之,則不觸發(fā)。多次漏觸發(fā)進行恢復時僅進行一次補償觸發(fā)。
僅當 通信方式 設置為 回調(diào) CALLBACK,且 調(diào)度類型 為 cron 表達式觸發(fā) 時,可配置此項。
超時策略
設置任務執(zhí)行超時后的處理策略,可選值:
不處理:觸發(fā)記錄和執(zhí)行記錄狀態(tài)均標記為失敗。
按失敗策略重試:本次調(diào)度記錄狀態(tài)標為失敗,并按照 失敗處理策略 進行失敗重試。重試后本次調(diào)度記錄將被重置為重試結(jié)果。
停止后續(xù)觸發(fā):執(zhí)行記錄狀態(tài)為失敗,觸發(fā)記錄狀態(tài)為超時,并且無法再次觸發(fā)。僅當開啟任務互斥模式時可選擇此項。
僅當 通信方式 設置為 回調(diào) CALLBACK 時配置。
超時時間
設置任務執(zhí)行的超時時間,當任務超過此時間未回調(diào)則認為執(zhí)行失敗。單位可選擇為 分鐘 和 小時。
僅當 通信方式 設置為 回調(diào) CALLBACK 時配置。
失敗處理策略
設置任務執(zhí)行失敗后的處理策略,可選值:
不重試:失敗后不進行重試。
最多重試三次:失敗后立即進行重試,但最多重試三次。
重試到下次觸發(fā):失敗后立即進行重試,直到下次觸發(fā)時間。
優(yōu)先級
用于識別任務的重要性,暫無其他作用。
默認為 中等。
描述(可選)
配置任務的描述信息,例如業(yè)務含義、影響范圍等,最多 1024 個字符。
任務分片示例代碼
public class ShardingSchedule implements ISimpleJobHandler { private final Logger LOGGER = LoggerFactory.getLogger(ShardingSchedule.class); private ThreadPoolExecutor threadPool; @Override public String getName() { return "SHARDING_SCHEDULE"; } @Override public ClientCommonResult handle(JobExecuteContext jobExecuteContext) throws Exception { int sharding = jobExecuteContext.getSharding(); //當前機器獲取到的分片數(shù) LOGGER.info("current machine sharding is " + sharding); //總的分片數(shù) System.out.println("total sharding num is " + jobExecuteContext.getShardingCount()); System.out.println("activity sharding is" + jobExecuteContext.getActivitySharding()); return ClientCommonResult.buildSuccessResult(); } @Override public ThreadPoolExecutor getThreadPool() { return threadPool; } /** * Setter method for property threadPool. * * @param threadPool value to be assigned to property threadPool */ public void setThreadPool(ThreadPoolExecutor threadPool) { this.threadPool = threadPool; } }
獲取和覆蓋自定義參數(shù)示例代碼
public class SimpleTaskDemo implements ISimpleJobHandler { @Override public ClientCommonResult handle(JobExecuteContext context) { // 根據(jù) key 獲取 obj Object obj = context.getCustomParam("intObj"); // 獲取自定義參數(shù) Map<String, Object> paramsMap = context.getCustomParams(); context.putCustomParams("num", 2); List<String> listparam = newArrayList <>(); listparam.add("aaaaaa"); listparam.add("111111"); context.putCustomParams("intparam", 111); context.putCustomParams("stringparam", "dfadsfad1243"); context.putCustomParams("listparam", listparam); // 注意對象必須實現(xiàn) Serializable context.putCustomParams("objectParam", newObject()); return ClientCommonResult.buildSuccessResult(); } .... }
單擊 提交。
在任務列表中打開目標任務的 是否啟用 開關。
如果有客戶端在線,新配置的任務自動有客戶端注冊。任務在禁用的狀態(tài)下,您也可以在操作列單擊 觸發(fā),手動觸發(fā)一次任務。