定时器:在固定时间执行特定的方法。
第一步,需要一个TimerManager类
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
/**
* 定时调度器
* @author Miao
*
*/
public class TimerManager {
//设置间隔执行时间(单位毫秒)
private static final long PERIOD_DAY = 600000000;
public TimerManager(){
Calendar calendar = Calendar.getInstance();
//设置开始时间-时
calendar.set(Calendar.HOUR_OF_DAY,0);
//设置开始时间-分
calendar.set(Calendar.MINUTE,0);
//设置开始时间-秒
calendar.set(Calendar.SECOND,0);
//设置第一次执行定时任务的时间
Date date =calendar.getTime();
//如果第一次执行定时任务小于当前时间,那么任务会立即执行,所以可以加一天
if(date.before(new Date())){
//设置延迟开始时间0为不延迟,1为一天后......
date=this.addDay(date,0);
}
//时间调度器
Timer timer=new Timer();
//调度任务
MyDataTimerTask task=new MyDataTimerTask();
/*
* task:继承了TimerTask类并实现 public void run()方法,即为设定调用功能的类
* date:设定定时器第一次调用run方法的时间,如果为0,表示不设定时间,立即执行
* 第三个参数是指第一次调用run方法后以后每次间隔时间,单位毫秒,这里默认一分钟
*/
timer.schedule(task,date,PERIOD_DAY);
}
//增加或减少天数
public Date addDay(Date date,int num){
Calendar starDT=Calendar.getInstance();
starDT.setTime(date);
starDT.add(Calendar.DAY_OF_MONTH,num);
return starDT.getTime();
}
}
第二步:在MyDataTimerTask 类调用我们需要的方法,书写定时任务
import java.util.TimerTask;
public class MyDataTimerTask extends TimerTask {
@Override
public void run() {
System.out.println("run方法执行定时任务");
}
第三步:设置开启定时器
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 项目启动时监听器加载类
* @author Miao
*
*/
public class TimingListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("定时器任务开始了");
new TimerManager();
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
第四步:在Web.xml 中配置监听器,在项目启动的时间加载定时任务
<!-- 设置定时任务 -->
<listener>
<listener-class>
cn.com.reachway.document.timing.TimingListener
</listener-class>
</listener>
当然 第三步第四步都可以不写,其实随便一个方法中直接 new TimerManager();就可以启动定时器,我这里只要是为了配合使用监听器,在项目启动的时候自动加载定时任务。其中注解都很详细。有什么不理解的欢迎留言,也欢迎大神指点