国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 玛曲县| 都昌县| 宁化县| 丹棱县| 班玛县| 白水县| 平果县| 库尔勒市| 安塞县| 海阳市| 正安县| 普陀区| 惠水县| 镇赉县| 莎车县| 溧水县| 竹山县| 特克斯县| 西乌珠穆沁旗| 南皮县| 如东县| 林口县| 开化县| 丽水市| 东乌珠穆沁旗| 淮阳县| 垫江县| 思茅市| 龙山县| 永安市| 图木舒克市| 即墨市| 徐汇区| 客服| 纳雍县| 和龙市| 乡城县| 运城市| 老河口市| 宜兰市| 耒阳市|