如何在Web应用中去启动后台的任务

发表于:2007-06-11来源:作者:点击数: 标签:
原理 本方案的原理是写一个实现了ServletContextListener接口的类,该类中有两个方法:public void contextInitialized(ServletContextEvent sce),它是在应用启动时调用;另一个方法是:public void contextDestroyed(ServletContextEvent sce),该方法是在

原理



本方案的原理是写一个实现了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文件中增加如下一行配置: 

root

ServiceLoader

index.html



5.启动web服务即可。

总结



其实实现这个功能的方法很多,我在这里是应用了ServletContextListener接口和开源api quartz,希望能对你的开发有所帮助。

(责任编辑 火凤凰 sunsj@51cto.com  TEL:(010)68476636-8007)



原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
...