工作流調度
更新時間:
本文介紹如何通過可視化的工作流進行任務編排且支持Cron表達式和API。
使用說明
工作流中的Job沒有獨立調度時間,跟隨工作流的時間開始調度。
工作流調度至少要有2個Job,且有依賴關系。如果只有一個Job,請直接使用任務管理。
工作流支持跨應用編排,可以將不同應用下的任務進行編排。
使用限制
當前只有Java任務支持數據傳輸,分布式Java任務請使用MapReduce模型進行數據傳輸。
使用指南
具體操作,請參見流程管理。
工作流上下游數據傳遞
SchedulerX提供工作流任務編排,同時支持任務上下游的數據傳遞。
返回執行結果
/**
*
* @param status
* @param result, the size should be less than 1000 bytes
* @throws Exception
*/
public ProcessResult(boolean status, String result) throws Exception;
在Processor結尾,通過該方法可以返回result執行結果。
說明
result的長度不能超過1000字節,不是String的長度。如果有中文字符,可能會超過1000字節,超過1000字節時任務會失敗。
獲取上游數據
List<JobInstanceData> upstreamDatas = JobContext.getUpstreamData();
在Processor里,可以通過該接口從JobContext中獲取上游的數據,上游的數據是一個list(可能有多個父節點)。JobInstanceData里有兩個屬性,分別是JobName和Data(String類型)。
Demo
首先編寫三個JobProcessor。
public class TestSimpleJobA extends JavaProcessor { @Override public ProcessResult process(JobContext context) throws Exception { System.out.println("TestSimpleJobA " + DateTime.now().toString("yyyy-MM-dd HH:mm:ss")); return new ProcessResult(true, String.valueOf(1)); } }
public class TestSimpleJobB extends JavaProcessor { @Override public ProcessResult process(JobContext context) throws Exception { System.out.println("TestSimpleJobB " + DateTime.now().toString("yyyy-MM-dd HH:mm:ss")); return new ProcessResult(true, String.valueOf(2)); } }
public class TestSimpleJobC extends JavaProcessor { @Override public ProcessResult process(JobContext context) throws Exception { List<JobInstanceData> upstreamDatas = context.getUpstreamData(); int sum = 0; for (JobInstanceData jobInstanceData : upstreamDatas) { System.out.println("jobName=" + jobInstanceData.getJobName() + ", data=" + jobInstanceData.getData()); sum += Integer.valueOf(jobInstanceData.getData()); } System.out.println("TestSimpleJobC sum=" + sum); return new ProcessResult(true, String.valueOf(sum)); } }
通過控制臺配置工作流如下圖所示:
觸發一次該工作流之后,在左側導航欄單擊執行列表>流程實例列表,找到創建的工作流名稱。然后單擊實例ID/流程實例圖,進入工作流實例詳情頁面,右鍵單擊JobA的實例,選擇詳情,進入任務實例詳情,可以看到JobA實例結果=1,如下圖:
同理,可以看到JobB的實例結果=2, JobC的實例結果=3。
在控制臺查看JobC機器的打印信息。
jobName=jobB, data=2 jobName=jobA, data=1 TestSimpleJobC sum=3
文檔內容是否對您有幫助?