前面文字介紹了定時任務模組,我們可以通過配置檔案的動態配置來控制任務的行為。由於配置檔案的動態更新是所有配置引數都重新更新,對於多執行緒的,某些情況下會影響到其他任務。如我們對任務a進行了restart ,下次我們對任務b進行shutdown,如果我們忘記將a的狀態改為run,則a再次restart。現在我們利用上篇文章介紹的命令列訊息輸入模組tlmsgscanner來建立定時任務的命令列控制台,通過命令可以對任務進行管理,而無需更改配置檔案。
定時任務命令列控制台模組為tlmsgtaskconsole,繼承命令列訊息控制類tlmsgscanner。其配置引數只有乙個msgtaskmodule,用來定義要管理的定時任務模組,可以在工廠配置中直接新增:
public class main
}
其中最後一行 myfactory.putmsg("msgtaskconsole",new tlmsg().setaction("startscan")); 為啟動命令。
tlmsgtaskconsole繼承tlmsgscanner ,因此需要的配置也與tlmsgscanner一樣,我們在**中直接定義了預設配置:
@override
protected void initproperty() ;
}params.put("defaultmodule",name);
params.put("defaultaction","console");
hashmapmparams= new hashmap<>();
mparams.put("actions","console");
msgtomodules=new hashmap<>();
msgtomodules.put(name,mparams);
}
引數初始化中,定義了預設的訊息接受模組為控制台模組自身,預設的訊息指令為 "console" 。任何輸入訊息都傳送給控制台,然後由控制台解析指令傳送給定時任務模組:
@override
protected tlmsg checkmsgaction(object fromwho, tlmsg msg)
return returnmsg;
}private void console(object fromwho, tlmsg msg)
execmsg(msg);
}private boolean execmsg(tlmsg msg) }}
}if(settaskstatus(msg) == false)
else
return true ;
}private boolean execcmd(string cmd)
if(str[0].equals("shutdown") )
if(str[0].equals("restart") )
if(str[0].equals("stop") )
if(str[0].equals("run") )
return false ;
}switch (cmd)
}
執行效果:
控制台命令:
1、 run/stop/shutdown/restart all 或者taskid ,執行、停止、關閉、重啟所有任務或某個任務
其中 shutdown all 取消所有任務執行緒但不關閉執行緒池
shutdown pool 關閉執行緒池。
run:執行乙個任務,如果任務沒啟動則啟動,對於暫停的任務繼續執行,對於已經執行的任務不影響
stop:暫停任務,任務執行緒存在,可用run繼續執行。
restart : 不管任務狀態為何,都重新啟動。
2、給任務設定引數 : t=任務id s=任務狀態 ,其他引數與配置檔案一樣 。
統一物件訊息程式設計(7) 物件訊息程式設計框架4
模組工廠 tlobjectfactory 負責模組的建立 初始化和儲存。每次程式執行,首先例項化模組工廠,然後由模組工廠啟動主模組。原始碼 public class tlobjectfactory extends tlbasemodule public void destroymodule over...
一 物件模型
在ruby程式中,物件僅僅是其大世界的乙個公民而已,除了物件還有其他語言構件,比如類 class 模組 module 以及例項變數 imstance variable 等,元程式設計操控的就是這些語言構件。所有語言構件存在於其中的系統稱為物件模型,它是ruby的靈魂。1 物件由一組例項變數和乙個類的...
物件導向(一) 物件屬性
物件屬性型別 每個物件都是基於乙個引用型別建立的 1.資料屬性 2.訪問器屬性 4個特性 1.configurable 能否delete屬性從而重新定義屬性 能否修改屬性的特性 能否把屬性改為訪問器屬性 2.enumerable 能否用for in迴圈返回屬性 3.writable 能否修改屬性的值...