麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

如何在Web應用中啟動后臺任務

2019-11-18 12:50:29
字體:
來源:轉載
供稿:網友

  摘要
  
  我們經常在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,希望能對你的開發有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久一区二区三区精品 | 成人在线精品视频 | 欧美一级无毛 | 亚洲一区在线视频观看 | 国产一区二区三区在线视频 | 欧美在线成人影院 | 无遮挡一级毛片视频 | 国产精品一区在线看 | av性色全交蜜桃成熟时 | 美女在线视频一区二区 | 中文字幕一二三区芒果 | 国产免费小视频在线观看 | 男女羞羞视频在线免费观看 | 成人在线视频免费播放 | 一区二区免费网站 | 国产999精品久久久久 | 免费的性生活视频 | 精品国产高清一区二区三区 | 在线a亚洲视频播放在线观看 | 亚洲啊v在线观看 | 日韩欧美视频一区二区三区 | 亚洲成人福利电影 | 国产午夜电影 | 亚洲成人入口 | av在线一区二区三区四区 | 欧美成人免费 | videos韩国| 免费视频www在线观看 | 国产无遮挡一区二区三区毛片日本 | 欧美精品一区二区三区在线 | 性 毛片 | 伊人午夜| 亚洲精品成人久久 | 久久亚洲精品久久国产一区二区 | 九九热精品在线视频 | 日韩精品网站在线观看 | 蜜桃久久一区二区三区 | 国产影院一区 | 黄色的视频在线观看 | 91精品国产免费久久 | 国产激情视频在线 |