一個后臺應(yīng)用程序,使用了Spring+iBatis框架。
有這樣的需求,要求程序啟動后,要一直駐留內(nèi)存,而不能因為出現(xiàn)數(shù)據(jù)庫連接失效、“閃動”、或者網(wǎng)線斷了而掛起,因為沒有人值守程序,并且當(dāng)網(wǎng)絡(luò)故障、數(shù)據(jù)庫故障、配置參數(shù)等故障排除后,程序能根據(jù)修復(fù)的新狀態(tài)繼續(xù)執(zhí)行。
實現(xiàn)方式:以前使用Linux操作系統(tǒng)的shell腳本定時檢測,但是俺不會寫shell腳本。
于是有了下面的實現(xiàn)方式:
????????public static voidmain(String[] args) {
????????????????while(true) {
????????????????????????try{
???????????????????????????????? ctx = ApplicationContextUtil.getApplicationContext();
???????????????????????????????? IssuePlan issuePlan = (IssuePlan) ctx.getBean("issuePlan");
???????????????????????????????? issuePlan.execute();
???????????????????????? }catch(Throwable e) {
???????????????????????????????? log.error("網(wǎng)絡(luò)視頻節(jié)目分發(fā)程序啟動發(fā)生了嚴(yán)重錯誤!", e);
????????????????????????????????try{
???????????????????????????????????????? Thread.sleep(pause_timespan * 1000L);
???????????????????????????????? }catch(InterruptedException e1) {
???????????????????????????????? }
???????????????????????? }
???????????????? }
???????? }
這種方式運行良好,每次因為嚴(yán)重錯誤都會重新初始化Spring的ApplicationContext。這樣,整個程序的運行就是:一直執(zhí)行任務(wù),有任務(wù)就執(zhí)行,沒任務(wù)休息一段時間,有錯誤等待一段時間重試,沒錯誤繼續(xù)。
issuePlan.execute(); 是核心的后臺任務(wù)執(zhí)行者,這個方法在正常情況下是不會退出的,寫法是while(true)邏輯,只有當(dāng)發(fā)生一些嚴(yán)重錯誤會導(dǎo)致此方法發(fā)生異常退出。
?
posted on 2009-10-01 16:05
jadmin 閱讀(147)
評論(0) 編輯 收藏