javaWeb监听器结合定时器实现定时执行任务
2015-11-23 15:46
507 查看
java监听器
通过监听器可以自动的激发一些操作,比如监听在线人数;
监听器接口有:
ServletContextListener——监听ServletContext对象;
HttpSessionListener——监听session对象;
ServletRequestListener——监听request对象;
java监听器的使用步骤
1.确定监听的对象,实现对应接口,并重写接口中的方法;
2.在web.xml中配置该监听器;
java定时器
在应用中,经常需要定期的执行某个操作,此时利用java定时器,java.util.Timer工具类实现定期执行该任务。
java定时器的使用步骤
1.创建该定时器的类,实现TimerTask接口,重写run方法,run方法中具体写该操作;
2.创建Timer对象,调用schedule()方法,设定定时执行的规则,包括多久执行一次,具体执行哪个任务;
例子:监听器与定时器结合周期性执行任务
实现每天早上7点定时执行某任务和每一个小时,每二十分钟分别执行不同的任务
1.创建监听器类CrawlListenner
public class CrawlListenner implements ServletContextListener {
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
@Override
public void contextInitialized(ServletContextEvent arg0) {
Timer timer = new Timer();
CrawlTask task = new CrawlTask();
CrawlDataSumTask dataTask = new CrawlDataSumTask();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 7);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date = calendar.getTime();
// 此时要在第一次执行定时任务的时间加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
calendar.add(Calendar.DAY_OF_MONTH,1);
date =calendar.getTime();
}
// 定点执行,每隔一天重复的执行
timer.schedule(dataTask, date,PERIOD_DAY);
// 隔一段时间执行一次
timer.schedule(task, 0, 1 * 60 * 1000);
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
3.创建定时器类,继承TimerTask,重写run方法,run方法中就是定期执行的任务
通过监听器可以自动的激发一些操作,比如监听在线人数;
监听器接口有:
ServletContextListener——监听ServletContext对象;
HttpSessionListener——监听session对象;
ServletRequestListener——监听request对象;
java监听器的使用步骤
1.确定监听的对象,实现对应接口,并重写接口中的方法;
2.在web.xml中配置该监听器;
java定时器
在应用中,经常需要定期的执行某个操作,此时利用java定时器,java.util.Timer工具类实现定期执行该任务。
java定时器的使用步骤
1.创建该定时器的类,实现TimerTask接口,重写run方法,run方法中具体写该操作;
2.创建Timer对象,调用schedule()方法,设定定时执行的规则,包括多久执行一次,具体执行哪个任务;
例子:监听器与定时器结合周期性执行任务
实现每天早上7点定时执行某任务和每一个小时,每二十分钟分别执行不同的任务
1.创建监听器类CrawlListenner
public class CrawlListenner implements ServletContextListener {
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
@Override
public void contextInitialized(ServletContextEvent arg0) {
Timer timer = new Timer();
CrawlTask task = new CrawlTask();
CrawlDataSumTask dataTask = new CrawlDataSumTask();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 7);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date = calendar.getTime();
// 此时要在第一次执行定时任务的时间加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
calendar.add(Calendar.DAY_OF_MONTH,1);
date =calendar.getTime();
}
// 定点执行,每隔一天重复的执行
timer.schedule(dataTask, date,PERIOD_DAY);
// 隔一段时间执行一次
timer.schedule(task, 0, 1 * 60 * 1000);
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
}
</pre><p><span style="font-size:14px;"></span></p><p><span style="font-size:14px;">2.配置web.xml文件,添加监听器</span></p><p><span style="font-size:14px;"></span><pre name="code" class="java"> <listener> <listener-class>com.listenner.CrawlListenner</listener-class> </listener>
3.创建定时器类,继承TimerTask,重写run方法,run方法中就是定期执行的任务
<span style="font-size:14px;">//每20分钟、60分钟执行一次 public class CrawlTask extends TimerTask { private int count = 0; @Override public void run() { count++; CrawlAllListenner listen = null; if (count % 21 == 0) { listen = new CrawlMasterListenImpl(); } if (count % 61 == 0) { listen = new HbaseDataListenImpl(); } if (listen != null) { listen.crawlListener(); } } }</span>
<span style="font-size:14px;">//每天七点执行 public class CrawlDataSumTask extends TimerTask { @Override public void run() { CrawlAllListenner listen = new HbaseDataListenImpl(); listen.dataSumListenner(); } }</span>
相关文章推荐
- Mootools 1.2教程 定时器和哈希简介
- C#定时器和随机数
- C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析
- C#使用timer实现的简单闹钟程序
- C#中timer定时器用法实例
- C#自定义基于控制台的Timer实例
- C#中的Timer和DispatcherTimer使用实例
- php实现的Timer页面运行时间监测类
- .NET中的Timer类型用法详解
- JS中自定义定时器让它在某一时刻执行
- JavaScript定时器详解及实例
- 基于jQuery实现的扇形定时器附源码下载
- 跟我学习javascript的定时器
- Qt定时器和随机数详解
- asp.net中Timer无刷新定时器的实现方法
- 浅析JAVA中过滤器、监听器、拦截器的区别
- libevent库的使用--定时器的使用实例
- MySQL定时器EVENT学习笔记
- 10 过滤器和监听器
- iOS的定时器用法