javaWeb监听器结合定时器实现定时执行任务

来源:互联网 发布:求迅龙数据恢复注册机 编辑:程序博客网 时间:2024/06/12 20:23

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>




1 0
原创粉丝点击