美文网首页
5.1 基于Timer的Job实现

5.1 基于Timer的Job实现

作者: 孔垂云 | 来源:发表于2017-05-21 23:54 被阅读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秒钟执行一次

    源码下载

    本工程详细源码

    相关文章

      网友评论

          本文标题:5.1 基于Timer的Job实现

          本文链接:https://www.haomeiwen.com/subject/yrifzttx.html