5.1 基于Timer的Job实现

2017-05-21  本文已影响0人  孔垂云

在java开发中,定时任务是很常见的操作。实现定时任务的方式目前主要有三种:

1、利用java自带的timer机制
2、利用第三方quartz组件
3、利用spring-task

Timer

在web工程中,利用timer来实现的定时任务,需要一个listener来定时启动

JobListerner.java

public class JobListerner implements ServletContextListener {
    private java.util.Timer timer = null;
    private final static long DELAY_HOUR = 5 * 1000;//每5秒操作一次

    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        timer.cancel();
    }

    public void contextInitialized(ServletContextEvent servletContextEvent) {
        timer = new Timer(true);
        timer.scheduleAtFixedRate(new JobTask(), new Date(), DELAY_HOUR);// 定时5秒钟处理一次
    }
}

比较简单,利用timer.scheduleAtFixedRate()来定时启动,这个方法包含三个参数,

public void scheduleAtFixedRate(TimerTask task, Date firstTime,
                                    long period) {
        if (period <= 0)
            throw new IllegalArgumentException("Non-positive period.");
        sched(task, firstTime.getTime(), period);
    }

第一个参数是要执行的task,第二个参数是第一次执行时间,这里设置为new Date(),即立刻执行,第三个参数设置为时间间隔。

JobTask.java

public class JobTask extends TimerTask {

    protected JobTask() {
        super();
    }

    public void run() {
        System.out.println("正在执行:" + new Date());
    }
}

比较简单,这个类继承TimerTask ,实现run方法即可。具体的业务逻辑只需要在run方法里面写。

web.xml

这里面增加一个listener配置,启动时执行监听

 <listener>
    <listener-class>com.critc.job.timer.JobListerner</listener-class>
  </listener>

启动tomcat,在控制可以看到如下输出:


每5秒钟执行一次

源码下载

本工程详细源码

上一篇 下一篇

猜你喜欢

热点阅读