<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免费看| 暖暖免费高清日本一区二区三区| 亚洲视频在线免费观看| 免费黄色网址入口| 国产精品免费AV片在线观看| 亚洲短视频在线观看| 亚洲精品NV久久久久久久久久| 鲁大师在线影院免费观看| 羞羞网站免费观看| 亚洲日韩乱码中文无码蜜桃臀| 亚洲国产精品日韩| 国产免费不卡v片在线观看| xxxxx做受大片在线观看免费| 亚洲黄色在线视频| 亚洲精品无码永久在线观看你懂的| 久久不见久久见免费影院| 女人隐私秘视频黄www免费| 亚洲精品无码人妻无码| 亚洲精品第一国产综合精品| 久久久久无码专区亚洲av| 在线免费观看污网站| 国产h视频在线观看网站免费| 日韩免费高清播放器| 精品免费AV一区二区三区| 亚洲乱妇老熟女爽到高潮的片| 亚洲资源在线观看| 亚洲AV无码乱码在线观看裸奔 | 色www永久免费视频| 91免费精品国自产拍在线不卡| 日韩免费人妻AV无码专区蜜桃 | 亚洲成a人片在线观看中文app| 亚洲av鲁丝一区二区三区| 亚洲熟妇无码八AV在线播放| 亚洲高清无码专区视频| 国产在线观看免费不卡| 国产大片91精品免费观看男同| 国产精品极品美女免费观看| 日韩视频在线免费观看| 免费国产小视频在线观看| 亚洲国产婷婷综合在线精品 | 免费无码又爽又刺激毛片|