写一个定时任务类,继承java.tuil.TimerTask,重写run()方法,在该方法中实现任务业务代码。
package com.gao.timertask;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask {
public MyTimerTask() {}
@Override
public void run() {
//定时任务业务逻辑代码
}
}
写一个定时器管理类,start()方法来启动定时器,定制任务执行的时间间隔,并加入定时任务。
package com.gao.timertask;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
public class TimerManager {
/**
* 执行任务的间隔
*/
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
private int hour = 2;
private int minute = 0;
private int second = 0;
private MyTimerTask timerTask;
public TimerManager() {}
public int getHour() {
return hour;
}
public void setHour(int hour) {
this.hour = hour;
}
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
this.minute = minute;
}
public int getSecond() {
return second;
}
public void setSecond(int second) {
this.second = second;
}
public MyTimerTask getTimerTask() {
return timerTask;
}
public void setTimerTask(MyTimerTask timerTask) {
this.timerTask = timerTask;
}
// 增加或减少天数
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
/**
* 启动定时器
*/
public void start() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
Date date=calendar.getTime(); //第一次执行定时任务的时间
//如果第一次执行定时任务的时间 小于 当前的时间
//此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
Timer timer = new Timer();
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。
timer.schedule(timerTask, date,PERIOD_DAY);
}
}
利用监听器启动定时器。
package com.gao.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.gao.timertask.TimerManager;
public class MyTimerTaskListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
@Override
public void contextInitialized(ServletContextEvent sce) {
WebApplicationContext context = WebApplicationContextUtils.
getRequiredWebApplicationContext(sce.getServletContext());
TimerManager timerManager = (TimerManager) context.getBean("timerManager");
timerManager.start();//启动定时器管理器
}
}
转载于:https://blog.51cto.com/8741262/1588884