下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1好多朋友用过Windows的任务计划,也有不少程序迷自己曾写过时钟报警、系统自动关机等趣味程序,可却很少有朋友在Web工程中实现过类似功能。当Web工程启动时,定时器能自动开始计时,在整个Web工程的生命期里,定时器能在每晚深夜触发一次任务。因此定时器的存放位置也值得考查,不能简单的存在于单个Servlet或JavaBean中,必须能让定时器宿主的存活期为整个Web工程生命期,在工程启动时能自动加载运行。结合这两点,跟Servlet上下文有关的侦听器就最合适不过了,通过在工程的配置文件中加以合理配置,会在工程启动时自动运行,并在整个工程生命期中处于监听状态。下面就Servlet侦听器结合Ja
2、va定时器来讲述整个实现过程。要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口, 同时实现它的contextInitialized(ServletContextEventevent)和contextDestroyed(ServletContextEventevent)两个接口函数。考虑定时器有个建立和销毁的过程,看了前面两个接口函数,就不容置疑的把建立的过程置入contextInitialized,把销毁的过程置入contextDestroyed了。我把ServletContextListener的实现类取名为ContextList
3、ener在其内添加一个定时器,示例代码如下所示:importjava.util.Timer;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServlet;publicclassContextListener
4、extendsHttpServletimplementsServletContextListenerpublicContextListener()privatejava.util.Timertimer=null;publicvoidcontextInitialized(ServletContextEventevent)timer=newjava.util.Timer(true);event.getServletContext().log(定时器已启动”);timer.schedule(newMyTask(event.getServletContext(),0,60*60*1000);event
5、.getServletContext().log(已经添加任务调度表);publicvoidcontextDestroyed(ServletContextEventevent)timer.cancel();event.getServletContext().log(定时器销毁”);2以上代码中,timer.schedule(newMyTask(event.getServletContext(),0,60*60*1000)这一行为定时器调度语句,其中MyTask是自定义需要被调度的执行任务(在我的财政数据中心项目中就是报表计算引擎入口),从java.util.TimerTask继承,下面会重点讲
6、述,第三个参数表示每小时(即60*60*1000毫秒)被触发一次,中间参数0表示无延迟。其它代码相当简单,不再详细说明。下面介绍MyTask的实现,上面的代码中看到了在构造MyTask时,传入了javax.servlet.ServletContext类型参数,是为记录Servlet日志方便而传入,因此需要重载MyTask的构造函数(其父类java.util.TimerTask原构造函数是没有参数的)。在timer.schedule()的调度中,设置了每小时调度一次,因此如果想实现调度任务每24小时被执行一次, 还需要判断一下时钟点,以常量C_SCHEDULE_HOUR表示(晚上12点,也即0点
7、)。同时为防止24小时执行下来,任务还未执行完(当然,一般任务是没有这么长的。,避免第二次又被调度以引起执行冲突,设置了当前是否正在执行的状态标志isRunning。示例代码如下所示:importjava.util.*;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse
8、;importjavax.servlet.http.HttpServlet;importjavax.servlet.*;publicclassMyTaskextendsTimerTaskprivatestaticfinalintC_SCHEDULE_HOUR=0;privatestaticbooleanisRunning=false;privateServletContextcontext=null;publicMyTask()publicMyTask(ServletContextcontext)this.context=context;publicvoidrun()Calendarcal=C
9、alendar.getInstance();if(!isRunning)if(C_SCHEDULE_HOUR=cal.get(Calendar.HOUR_OF_DAY)isRunning=true;context.log(开始执行指定任务);/TODO添加自定义的详细任务,以下只是示例/系统定时接收邮件Emailemail=newEmail();email.recieve();isRunning=false;context.log(”指定任务执行结束);else3context.log(上一次任务执行还未结束”);到这儿,ServletContextListener和MyTask的代码都已完整了。最后一步就是把ServletContextListen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 锅炉辅机检修工安全操作水平考核试卷含答案
- 广播电视线务员班组安全知识考核试卷含答案
- 废旧润滑油理化性能分析报告
- 矿井泵工安全意识强化能力考核试卷含答案
- 变配电运行值班员岗前工作合规考核试卷含答案
- 2025航空部件产业市场现状供需有效分析及投资机会全面规划研究报告
- 2025航空运输行业市场现状需求和供给评估投资规划分析研究报告
- 继电器线圈绕制工安全行为考核试卷含答案
- 2025航空航天飞行器维修行业现状供需分析投资评估规划分析报告
- 人造石生产工复试模拟考核试卷含答案
- 2025年《数据分析》知识考试题库及答案解析
- 宝安区老虎坑垃圾焚烧发电厂三期工程环境影响评价报告
- 设备安装用工合同范本
- 紫杉醇的课件
- DB50∕T 1633-2024 高标准农田耕地质量调查评价技术规范
- DB32T 5178-2025预拌砂浆技术规程
- 医疗风险防范知识培训课件
- 心力衰竭患者利尿剂抵抗诊断及管理中国专家共识解读
- 餐饮合伙合同范本及注意事项
- 2025湖南环境生物职业技术学院单招《语文》通关考试题库完整附答案详解
- 2022危险性较大的分部分项工程专项施工方案编制与管理指南
评论
0/150
提交评论