posts - 495,  comments - 11,  trackbacks - 0
          一個后臺應用程序,使用了Spring+iBatis框架。
          有這樣的需求,要求程序啟動后,要一直駐留內(nèi)存,而不能因為出現(xiàn)數(shù)據(jù)庫連接失效、“閃動”、或者網(wǎng)線斷了而掛起,因為沒有人值守程序,并且當網(wǎng)絡故障、數(shù)據(jù)庫故障、配置參數(shù)等故障排除后,程序能根據(jù)修復的新狀態(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)絡視頻節(jié)目分發(fā)程序啟動發(fā)生了嚴重錯誤!", e);
          ????????????????????????????????try{
          ???????????????????????????????????????? Thread.sleep(pause_timespan * 1000L);
          ???????????????????????????????? }catch(InterruptedException e1) {
          ???????????????????????????????? }
          ???????????????????????? }
          ???????????????? }
          ???????? }
          這種方式運行良好,每次因為嚴重錯誤都會重新初始化Spring的ApplicationContext。這樣,整個程序的運行就是:一直執(zhí)行任務,有任務就執(zhí)行,沒任務休息一段時間,有錯誤等待一段時間重試,沒錯誤繼續(xù)。
          issuePlan.execute(); 是核心的后臺任務執(zhí)行者,這個方法在正常情況下是不會退出的,寫法是while(true)邏輯,只有當發(fā)生一些嚴重錯誤會導致此方法發(fā)生異常退出。
          ?

          posted on 2009-10-01 16:05 jadmin 閱讀(150) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 南郑县| 酒泉市| 巫山县| 龙游县| 龙海市| 台江县| 饶平县| 新绛县| 抚顺市| 九江市| 宁远县| 思南县| 呼玛县| 开封市| 慈利县| 大悟县| 恩平市| 西平县| 顺义区| 夏河县| 吴忠市| 柳州市| 南漳县| 隆安县| 托克托县| 二手房| 霍州市| 安龙县| 荣成市| 汽车| 庆云县| 环江| 遂宁市| 阳曲县| 昆明市| 宣汉县| 郎溪县| 盐亭县| 天津市| 昭苏县| 绍兴县|