在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秒钟执行一次
网友评论