<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
    摘要
      
      我們常常在Web應用中需要啟動一個自己寫的服務,本文的目的是給你提供一個解決方案。
      
      原理
      
      本方案的原理是寫一個實現了ServletContextListener接口的類,該類中有兩個方法:public void contextInitialized(ServletContextEvent sce),它是在應用啟動時調用;另一個方法是:public void contextDestroyed(ServletContextEvent sce),該方法是在應用結束時調用。把我們要啟動的后臺應用邏輯放在contextInitialized方法中實現;把釋放后臺應用占用資源的工作放在contextDestroyed來處理。但我們啟動的后臺任務常常是有要求的,比如時間,頻率等,我在這里使用了一個開源組件:quartz。
      
      步驟
      
      1.寫業務調用類:
      
      // DumbJob.java
      import org.quartz.*;
      import java.util.*;
      public class DumbJob implements Job {
      public DumbJob() {
      }
      public void execute(JobExecutionContext context)
      throws JobExecutionException
      {
      //在這里寫業務處理代碼。什么,你不知道?那你別問我!!:-<
      }
      }
      
      本類的主要功能是由quartz中調度類按照指定的規則進行調用執行必要的業務邏輯。
      
      2.寫調度類
      
      // 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();  //獲取調度管理器
      JobDetail jobDetail = new JobDetail("myJob",
      sched.DEFAULT_GROUP,
      DumbJob.class);//創建工作
      CronTrigger trigger = new CronTrigger("myTrigger","test","0/10 * * * * ?");//創建觸發器
      sched.scheduleJob(jobDetail, trigger);  //添加到調度管理器中
      sched.start();//啟動調度管理器
      }
      
      public static void   stop()throws Exception{
      sched.shutdown();
      }
      }
      本類的目的是設置調用規則,在這里我用了“0/10 * * * * ?”表示每10秒鐘就執行一次,有關表達式的說明請參閱quartz的api文檔。
      
      3.編寫服務啟動類:
      
      //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中調用TestShedule.run()啟動后臺任務;在contextDestroyed中調用TestShedule.stop()停止后臺任務。
      
      4.部署服務啟動類
      
      在web.xml文件中增加如下一行配置:
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
      <web-app id="WebApp">
      <display-name>root</display-name>
      <!--下邊的listener部分就是配置信息-->
      <listener>
      <listener-class>ServiceLoader </listener-class>
      </listener>
      <welcome-file-list>
      <welcome-file>index.html</welcome-file>
      </welcome-file-list>
      </web-app>
      
      5.啟動web服務即可。
      
      總結
      
      其實實現這個功能的方法很多,我在這里是應用了ServletContextListener接口和開源api quartz,希望能對你的開發有所幫助。
    posted on 2007-09-11 10:13 禮物 閱讀(691) 評論(0)  編輯  收藏 所屬分類: Jbpm
    主站蜘蛛池模板: 亚洲人成亚洲人成在线观看| 久久伊人免费视频| 国产亚洲中文日本不卡二区| 亚洲欧洲国产精品香蕉网| 四虎免费久久影院| 无码中文在线二区免费| 日韩av无码久久精品免费| a级毛片免费播放| 有码人妻在线免费看片| 国产成人综合久久精品亚洲| 亚洲综合色一区二区三区| 亚洲香蕉免费有线视频| 亚洲AV无码久久寂寞少妇| 国产亚洲成归v人片在线观看| 国产精品深夜福利免费观看| 毛片免费观看网址| 国产va免费精品观看精品 | 国产hs免费高清在线观看| 毛片免费视频观看| a毛片基地免费全部视频| 99久久99这里只有免费费精品| 4444www免费看| 国产高清免费视频| 99视频全部免费精品全部四虎| 99re6在线视频精品免费下载| a级毛片免费在线观看| 久久久精品国产亚洲成人满18免费网站 | 亚洲一区二区三区夜色 | 希望影院高清免费观看视频| 亚洲网站免费观看| 欧洲乱码伦视频免费| 最近最新MV在线观看免费高清| 在线v片免费观看视频| 成人免费视频小说| 国产精品麻豆免费版| 免费吃奶摸下激烈视频| 亚洲一区二区三区在线视频| 久久久久亚洲精品无码网址 | 精品在线免费视频| 一级黄色免费毛片| 两个人日本WWW免费版|