| |
| 如何在Web应用中去启动后台的任务 |
| |
发布者: 发布时间:2007-01-07 |
|
|
|
摘要 我们常常在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秒钟就执行一次,有关表达式的说明请参阅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,希望能对你的开发有所帮助。
|
| (转载文章请保留出处:北天JAVA技术网(www.java114.com)) |
| |
| 更多精彩文章: |
| 通过Java Swing看透MVC设计模式 |
| Java 启动器如何查找类 |
| JDK6.0新特性:用Console开发控制台程序 |
| Sun公布第一个遵照GPL许可的java源代码 |
| JSP抓取网页代码的程序 |
| JSP+XML构架网站的实例 |
| |
| 最近评论: |
|
|
| 你曾悄悄的来过! |
| wow gold,wow gold,wow gold,ffxi gil max(4179) |
|
|
| 冰封的往事! |
| wow power leveling,wow gold,WoW Gold,wow gold
max(6144) |
|
|
| 飞舞的传奇! |
| 传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(7957) |
|
|
| 飞舞的传奇! |
| 传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(7857) |
|
|
| 飞舞的传奇! |
| 传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(1960) |
|
|
| |
| 免责声明:该文章由网友发表,如果对您造成侵权,请联系站长。 |
|