您的位置:首页 > 编程语言 > Java开发

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) {

}
</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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息