分享
 
 
 

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

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

摘要

我们常常在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文件中增加如下一行配置:

<?xml version="1.0" encoding="UTF-8"?

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"

<web-app id="WebApp"

<display-nameroot</display-name

<!--下边的listener部分就是配置信息--

<listener

<listener-classServiceLoader </listener-class

</listener

<welcome-file-list

<welcome-fileindex.html</welcome-file

</welcome-file-list

</web-app

5.启动web服务即可。

总结

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有