如何在Web应用中启动后台任务的实例讲解
我们常常在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秒钟就执行一次。
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文件中增加如下一行配置:
encoding="UTF-8"?>
root
ServiceLoader index.html
|
5、启动web服务即可。
总结
其实实现这个功能的方法很多,我在这里是应用了ServletContextListener接口和开源api quartz,希望能对你的开发有所帮助。