国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

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

2019-11-18 12:50:29
字體:
供稿:網(wǎng)友

  摘要
  
  我們經(jīng)常在Web應用中需要啟動一個自己寫的服務,本文的目的是給你提供一個解決方案。
  
  原理
  
  本方案的原理是寫一個實現(xiàn)了ServletContextListener接口的類,該類中有兩個方法:public void contextInitialized(ServletContextEvent sce),它是在應用啟動時調(diào)用;另一個方法是:public void contextDestroyed(ServletContextEvent sce),該方法是在應用結束時調(diào)用。把我們要啟動的后臺應用邏輯放在contextInitialized方法中實現(xiàn);把釋放后臺應用占用資源的工作放在contextDestroyed來處理。但我們啟動的后臺任務經(jīng)常是有要求的,比如時間,頻率等,我在這里使用了一個開源組件:quartz。
  
  步驟
  
  1.寫業(yè)務調(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è)務處理代碼。什么,你不知道?那你別問我!!:-<
  }
  }
  
  本類的主要功能是由quartz中調(diào)度類按照指定的規(guī)則進行調(diào)用執(zhí)行必要的業(yè)務邏輯。
  
  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();
  }
  }
  本類的目的是設置調(diào)用規(guī)則,在這里我用了“0/10 * * * * ?”表示每10秒鐘就執(zhí)行一次,有關表達式的說明請參閱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中調(diào)用TestShedule.run()啟動后臺任務;在contextDestroyed中調(diào)用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服務即可。
  
  總結
  
  其實實現(xiàn)這個功能的方法很多,我在這里是應用了ServletContextListener接口和開源api quartz,希望能對你的開發(fā)有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 札达县| 会东县| 焦作市| 云和县| 万州区| 伊宁县| 永兴县| 唐河县| 拉孜县| 孟连| 察雅县| 延安市| 丹江口市| 昌图县| 克什克腾旗| 双流县| 乐安县| 安顺市| 安徽省| 新兴县| 徐州市| 临洮县| 夏津县| 济源市| 龙门县| 区。| 丹寨县| 灵川县| 富阳市| 莲花县| 星座| 宜川县| 曲阜市| 南川市| 吉水县| 阿荣旗| 肃北| 宣汉县| 明光市| 蛟河市| 定安县|