系統在空閑時可以跑一些任務來進行一些統計方面的運算,大多是取數據,插數據,統計數據。這些任務有時候是有依賴關系的,比如A任務統計依賴B任務完成,起初我們把B任務安排在2點跑,A任務3點跑,可是B任務如果在一個小時內不能完成,在跑A任務的時候就會有問題。那么必須要保證B任務是完成的情況下才開跑A任務。
所以是不是可以考慮用一個鏈表這種數據結構把任務串起來執行,并且也保證每個任務的業務都在代碼層面上分開。
類似:

代碼示例:

BaseTask:
public abstract class BaseTask { PRivate String id; public abstract void execute(); public String getId() { return id; } public void setId(String id) { this.id = id; }}SimpleBaseTask:
public abstract class SimpleBaseTask extends BaseTask{ public void execute() { beforeExecute(); doTask(); doNextTask(); afterExecute(); } public void doNextTask(){ if(nextTasks != null){ for (BaseTask task : nextTasks) { task.execute(); } } } public abstract void beforeExecute(); public abstract void afterExecute(); public abstract void doTask(); private String name; private BaseTask parentTask; // 每一個任務都可以擁有多個后續任務 這些任務都依賴本任務的執行完成 private List<BaseTask> nextTasks; public String getName() { return name; } public void setName(String name) { this.name = name; } public BaseTask getParentTask() { return parentTask; } public void setParentTask(BaseTask parentTask) { this.parentTask = parentTask; } public List<BaseTask> getNextTasks() { return nextTasks; } public void setNextTasks(List<BaseTask> nextTasks) { this.nextTasks = nextTasks; }}ProcessGroup:
public abstract class ProcessGroup<T extends BaseTask> { // 每個任務進程執行的第一個任務邏輯 private BaseTask firstTask; public BaseTask getFirstTask() { return firstTask; } public void setFirstTask(BaseTask firstTask) { this.firstTask = firstTask; } public abstract void beforeProcess(); public abstract void afterProcess(); public void doProcess(){ beforeProcess(); firstTask.execute(); afterProcess(); }}SimpleProcessGroup :
public class SimpleProcessGroup extends ProcessGroup<SimpleBaseTask>{ @Override public void beforeProcess() { System.out.println("beforeProcess"); } @Override public void afterProcess() { System.out.println("afterProcess"); }}這種抽象局限性太大,把所有任務串聯起來會導致任務需要手動拆分,依賴關系植入代碼,難以維護。并且多任務依賴依然無法符合要求。
所以需要,更加強大的一個任務調度系統來實現這種靈活的任務依賴關系。
新聞熱點
疑難解答