Java Web项目中定时器Timer的使用
2017-08-18 16:11
337 查看
在以前的文章中,曾经写过一个调度器Quartz的使用实例,今天,分享一个JDK自带的定时器Timer在Java Web项目中的使用。
首先,简单说一下Quartz和Timer的相同和不同之处:
相同:他们都是定时去执行一些操作,比如,定时删除一些过期数据,定时发送一些通知消息等等。
区别:Quartz是一个开源的任务调度框架,需要进行配置和加入相应的依赖,而Timer是JDK自带的一个定时器,无需配置。
总结: 因为Quartz是一个开源的任务调度框架,所以功能更为强大和全面,但是使用较为繁琐,而Timer功能较Quartz来说简单一点,所以,复杂的任务调度最好使用Quartz,简单的任务调度使用Timer。
1、使用Timer首先要写一个任务类,代码如下:
2、因为这是web项目,需要写一个监听器来监听容器的启动与销毁,代码如下:
3、在web.xml配置一下监听器,代码如下:
当服务器启动是,任务类会按照设定好的时间或时间间隔去执行。
首先,简单说一下Quartz和Timer的相同和不同之处:
相同:他们都是定时去执行一些操作,比如,定时删除一些过期数据,定时发送一些通知消息等等。
区别:Quartz是一个开源的任务调度框架,需要进行配置和加入相应的依赖,而Timer是JDK自带的一个定时器,无需配置。
总结: 因为Quartz是一个开源的任务调度框架,所以功能更为强大和全面,但是使用较为繁琐,而Timer功能较Quartz来说简单一点,所以,复杂的任务调度最好使用Quartz,简单的任务调度使用Timer。
1、使用Timer首先要写一个任务类,代码如下:
package com.siweisoft.timer; import javax.servlet.ServletContext; import java.util.TimerTask; /** * 定时器任务类:主要是继承 TimerTask并实现它的run 方法 * Created by Robin on 2017-08-03. */ public class AutoReceiptJob extends TimerTask{ private static boolean isRunning = false; private ServletContext context = null; public AutoReceiptJob() { super(); } public AutoReceiptJob(ServletContext context) { this.context = context; } int count = 1; @Override public void run() { if (!isRunning) { context.log("开始执行指定任务"); /** * 自己的业务代码 */ System.out.println("定时器运行了"+count+"次"); count++; isRunning = false; context.log("指定任务执行结束"); } else { context.log("上一次任务执行还未结束"); } } }
2、因为这是web项目,需要写一个监听器来监听容器的启动与销毁,代码如下:
package com.siweisoft.timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import java.util.Calendar; import java.util.Date; /** * 监听类:监听服务器的启动并将任务添加到任务栈 * Created by Robin on 2017-08-03. */ public class ContextListener implements ServletContextListener{ public ContextListener() { } private java.util.Timer timer = null; /** * 初始化定时器 * web 程序运行时候自动加载 */ @Override public void contextInitialized(ServletContextEvent arg0) { /** * 设置一个定时器 */ timer = new java.util.Timer(true); arg0.getServletContext().log("定时器已启动"); /** * 定时器到指定的时间时,执行某个操作(如某个类,或方法) */ //设置执行时间 Calendar calendar =Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH); int day =calendar.get(Calendar.DAY_OF_MONTH);//每天 //定制每天的1:00:00执行, calendar.set(year, month, day, 01, 00, 00); Date date = calendar.getTime(); // System.out.println(date); int period = 24 * 60 * 60 * 1000; //每天的date时刻执行task,每隔persion 时间重复执行 timer.schedule(new AutoReceiptJob(arg0.getServletContext()), 2000L, 1000L); // 在 指定的date时刻执行task, 仅执行一次 // timer.schedule(new AutoReceiptJob(arg0.getServletContext()), date); arg0.getServletContext().log("已经添加任务调度表"); } /** * 当服务器停止时,定时器销毁 */ @Override public void contextDestroyed(ServletContextEvent arg0){ timer.cancel(); arg0.getServletContext().log("定时器销毁"); } }
3、在web.xml配置一下监听器,代码如下:
<listener> <listener-class>com.sxl.ContextListener</listener-class> </listener>
当服务器启动是,任务类会按照设定好的时间或时间间隔去执行。
相关文章推荐
- 关于Java Web 使用Java的TimerTask, 触发定时器(执行某些任务)的实例
- java web 项目中 简单定时器实现 Timer
- java web 项目中 简单定时器实现 Timer
- 自己开发能在asp.net项目正常使用的定时器WebTimer,让定时器听话起来
- 自己开发能在asp.net项目正常使用的定时器WebTimer,让定时器听话起来
- java web 项目中 简单定时器实现 Timer
- java的web项目中使用定时器
- java定时器的使用(Timer)
- java中使用线程实现Timer(定时器)原理和源码
- 显示第一个view, 延迟三秒再显示第二个view,使用java的定时器timer实现 需要启动两个activity
- java中的定时器Timer的使用及实例
- java中使用线程实现Timer(定时器)原理和源码
- java中使用线程实现Timer(定时器)原理和源码
- java中的定时器Timer的使用及实例
- ICTCLAS2011中文分词在java的web项目中的使用
- java 定时器的使用(Timer)
- web中TImer定时器的使用(web.xml)
- 在Eclipse的Web项目中java里面使用ant进行数字签名步骤详解
- java中使用线程实现Timer(定时器)原理和源码
- java 定时器的使用(Timer) 日期类型 转换