<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 禮物 閱讀(698) 評論(0)  編輯  收藏 所屬分類: Jbpm
    主站蜘蛛池模板: 免费无码H肉动漫在线观看麻豆 | 久久国产精品免费一区二区三区 | 国产亚洲精品va在线| 亚洲国产成人影院播放| 免费v片在线观看品善网| 久久亚洲AV成人无码国产电影| 亚洲毛片免费视频| 亚洲小说图片视频| 亚洲日本在线免费观看| 亚洲一级片在线观看| 国产精品亚洲专区在线观看| 亚洲国产综合精品中文第一| 亚洲国产成人久久精品软件| 小说区亚洲自拍另类| 人禽伦免费交视频播放| 久久久久免费视频| 亚洲电影免费在线观看| 蜜臀AV免费一区二区三区| 青青草a免费线观a| 最好免费观看韩国+日本| 免费夜色污私人影院在线观看| 亚洲av无码专区在线观看素人| 亚洲精品国产电影| 亚洲日韩精品无码一区二区三区| 久久国产亚洲电影天堂| 亚洲成在人线电影天堂色| 亚洲综合av一区二区三区不卡 | 亚洲国产另类久久久精品小说 | 亚洲AV无码乱码在线观看| 亚洲综合色婷婷七月丁香| 亚洲高清视频在线观看| 亚洲一级免费视频| 国产精品亚洲一区二区三区久久| sihu国产精品永久免费| 四虎国产精品永久免费网址| 亚洲欧洲免费无码| 亚洲精品线路一在线观看| 亚洲国产精品国自产电影| 中国china体内裑精亚洲日本| 国产精品亚洲va在线观看 | 亚洲码在线中文在线观看|