我们常常在Web应用中需要启动一个自己写的服务,本文的目的是给你提供一个解决方案。
<table width="674" border="0"> <tr> <td width="396">原理
本方案的原理是写一个实现了ServletContextListener接口的类,该类中有两个方法:
public void contextInitialized(ServletContextEvent sce)
它是在应用启动时调用;另一个方法是:
public void contextDestroyed(ServletContextEvent sce)
该方法是在应用结束时调用。
把我们要启动的后台应用逻辑放在contextInitialized方法中实现;把释放后台应用占用资源的工作放在contextDestroyed来处理。但我们启动的后台任务常常是有要求的,比如时间,频率等,我在这里使用了一个开源组件:quartz。
步骤
1、写业务调用类:
</td> </tr> </table>// DumbJob.java import org.quartz.*; import java.util.*; public class DumbJob implements Job { public DumbJob() { } public void execute (JobExecutionContext context) throws JobExecutionException { //在这里写业务处理代码。 } }
</td> </tr> </table>// 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(); } }
</td> </tr> </table>//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()); } } }
</td> </tr> </table><?xml version="1.0" encoding="UTF-8"?> web-app PUBLIC "- //Sun Microsystems, Inc. //DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> root ServiceLoader index.html
↑返回目录
前一篇: 纯jsp的单个文件上载代码
后一篇: Tomcat 5.5.11上手