当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
计算机一级辅导:使用Servlet上下文实现侦听器
发布时间:2010/1/6 8:25:08 来源:城市学习网 编辑:海蓝

  在项目中使用到定时任务,出来使用Spring自带的调度之外,还可以使用Servlet上下文实现

  一、创建一个Listener 类,实现ServletContextListener  接口,实现接口中的方法:

  import javax.servlet.ServletContextEvent;

  import javax.servlet.ServletContextListener;

  /**

  * 侦听器类 和Timer 结合起来定时执行任务

  */

  public class ContextListener implements ServletContextListener {

  private java.util.Timer timer = null;

  public void contextInitialized(ServletContextEvent arg0) {

  timer = new java.util.Timer(true);// 创建一个新计时器,指定其相关的线程作为守护程序运行。

  //System.out.println("启动定时器");

  //调度器,EarlyWarningTask() 为自定义调度任务

  //初始化时就执行一次任务

  timer.schedule(new EarlyWarningTask(),10, 60*60*1000);//执行任务前延迟10毫秒,执行任务的间隔60*60*1000毫秒

  //System.out.println("调度任务添加完成");

  }

  public void contextDestroyed(ServletContextEvent arg0) {

  timer.cancel();

  //System.out.println("定时任务销毁");

  }

  } [NextPage]

  二、获得Spring 的ApplicationContext配置信息,以便在调度任务中读取配置文件中的相关业务方法

  import org.springframework.context.support.AbstractApplicationContext;

  import org.springframework.context.support.ClassPathXmlApplicationContext;

  public class AppContext {

  private static AppContext instance;

  private AbstractApplicationContext appContext;

  public synchronized static AppContext getInstance() {

  if (instance == null) {

  instance = new AppContext();

  }

  return instance;

  }

  private AppContext() {

  this.appContext = new ClassPathXmlApplicationContext(

  "/applicationContext.xml");

  }

  public AbstractApplicationContext getAppContext() {

  return appContext;

  }

  }[NextPage]

  三、自定义调度任务类,继承TimerTask 类

  import java.util.TimerTask;

  public class EarlyWarningTask extends TimerTask {

  private static final int C_SCHEDULE_HOUR = 23;//执行时间23时

  private static boolean isRunning = false;

  //通过AppContext 类,获得配置文件中相关业务方法

  //inStorageDetailImp

  protected IInStorageDetailService getInStorageDetailService(){

  return (IInStorageDetailService)AppContext.getInstance().getAppContext()

  .getBean("inStorageDetailImp");

  }

  //    goodsWarningImp

  protected IGoodsWarningService getGoodsWarningService(){

  return (IGoodsWarningService)AppContext.getInstance().getAppContext()

  .getBean("goodsWarningImp");

  }

  //    lendOutAccountImp

  protected ILendOutAccountService getLendOutAccountService(){

  return (ILendOutAccountService) AppContext.getInstance().getAppContext()

  .getBean("lendOutAccountImp");

  }

  //lendOutWarningImp

  protected ILendOutWarningService getLendOutWarningService(){

  return (ILendOutWarningService)AppContext.getInstance().getAppContext()

  .getBean("lendOutWarningImp");

  }

  //任务在run()方法中实现

  @Override

  public void run() {

  Calendar cal = Calendar.getInstance() ;

  if(!isRunning){

  if(C_SCHEDULE_HOUR==cal.get(Calendar.HOUR_OF_DAY)){//HOUR_OF_DAY 用于 24 小时制时钟

  isRunning = true;

  System.out.println("执行定时任务");

  //任务代码

  //…………………………

  isRunning = false;

  System.out.println("定时任务结束");

  }else {

  System.out.println("未到定时任务时间");

  }

  }else{

  System.out.println("上一个定时任务未结束");

  }

  }

  四、web.xml配置监听

  <listener>

  <listener-class>com.cl.gdb.util.ContextListener</listener-class>

  </listener>

广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved