如何在Web應(yīng)用中啟動后臺任務(wù)

          http://www.javaresearch.org/article/showarticle.jsp?column=2&thread=32387 摘要 我們常常在Web應(yīng)用中需要啟動一個自己寫的服務(wù),本文的目的是給你提供一個解決方案。 原理 本方案的原理是寫一個實現(xiàn)了ServletContextListener接口的類,該類中有兩個方法: public void contextInitialized(ServletContextEvent sce),它是在應(yīng)用啟動時調(diào)用;另一個方法是:public void contextDestroyed(ServletContextEvent sce),該方法是在應(yīng)用結(jié)束時調(diào)用。把我們要啟動的后臺應(yīng)用邏輯放在contextInitialized方法中實現(xiàn);把釋放后臺應(yīng)用占用資源的工作放在contextDestroyed來處理。但我們啟動的后臺任務(wù)常常是有要求的,比如時間,頻率等,我在這里使用了一個開源組件:quartz。 步驟 1.寫業(yè)務(wù)調(diào)用類: // DumbJob.java import org.quartz.*; import java.util.*; public class DumbJob implements Job { public DumbJob() { } public void execute(JobExecutionContext context) throws JobExecutionException { //在這里寫業(yè)務(wù)處理代碼。什么,你不知道?那你別問我!!:-< } } 本類的主要功能是由quartz中調(diào)度類按照指定的規(guī)則進行調(diào)用執(zhí)行必要的業(yè)務(wù)邏輯。 2.寫調(diào)度類 // TestShedule.java import org.quartz.*; import java.util.*; public class TestShedule{ static SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory(); static Scheduler sched; public static void run()throws Exception{ sched = schedFact.getScheduler(); //獲取調(diào)度管理器 JobDetail jobDetail = new JobDetail("myJob", sched.DEFAULT_GROUP, DumbJob.class);//創(chuàng)建工作 CronTrigger trigger = new CronTrigger("myTrigger","test","0/10 * * * * ?");//創(chuàng)建觸發(fā)器 sched.scheduleJob(jobDetail, trigger); //添加到調(diào)度管理器中 sched.start();//啟動調(diào)度管理器 } public static void stop()throws Exception{ sched.shutdown(); } } 本類的目的是設(shè)置調(diào)用規(guī)則,在這里我用了“0/10 * * * * ?”表示每10秒鐘就執(zhí)行一次,有關(guān)表達式的說明請參閱quartz的api文檔。 3.編寫服務(wù)啟動類: //ServiceLoader.java import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class ServiceLoader implements ServletContextListener { public void contextInitialized(ServletContextEvent sce) { try{ TestShedule.run(); }catch(Exception ex){ System.out.println(ex.getMessage()); } } public void contextDestroyed(ServletContextEvent sce) { try{ TestShedule.stop(); }catch(Exception ex){ System.out.println(ex.getMessage()); } } } 在contextInitialized中調(diào)用TestShedule.run()啟動后臺任務(wù);在contextDestroyed中調(diào)用TestShedule.stop()停止后臺任務(wù)。 4.部署服務(wù)啟動類 在web.xml文件中增加如下一行配置: rootServiceLoader index.html 5.啟動web服務(wù)即可。 總結(jié) 其實實現(xiàn)這個功能的方法很多,我在這里是應(yīng)用了ServletContextListener接口和開源api quartz,希望能對你的開發(fā)有所幫助。 資源 quartz: http://www.opensymphony.com/quartz ServletContextListener在javax.servlet包中

          posted on 2006-09-27 16:52 Sheldon Sun 閱讀(242) 評論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(3)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 高雄县| 敦化市| 共和县| 陕西省| 正镶白旗| 九寨沟县| 祁东县| 临邑县| 东海县| 孟村| 邵东县| 密山市| 资源县| 出国| 亳州市| 延安市| 察雅县| 外汇| 德惠市| 全椒县| 武鸣县| 茂名市| 平南县| 马尔康县| 理塘县| 普安县| 项城市| 桂阳县| 溧水县| 视频| 南通市| 永德县| 类乌齐县| 嘉定区| 古浪县| 虹口区| 温州市| 凌云县| 陆良县| 广饶县| 新巴尔虎左旗|