5.1 基于Timer的Job实现

在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秒钟执行一次

源码下载

本工程详细源码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,633评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,469评论 19 139
  • 图文|古道常 光从天堂来到地上 云给了她须臾的形状 风是柔软的衣裳 山要流动的渴望 远方有一万种假象 一切终将变暖...
    困住风的气球阅读 4,801评论 40 72
  • liferay是一个开源Java库,通常是作为企业的内网系统。这个库将页面的不同元素,例如日历、开会计划等作为模版...
    zhishijuncc阅读 9,014评论 1 3
  • 今天,斌找我,他因为要回家,说电动车让我帮他骑,我说可以。但实际情况是,我只开一次电动车,还不是很熟悉,但我还是答...
    仰望之夏阅读 2,812评论 0 0