写一个定时任务类,继承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();//启动定时器管理器 } }
时间: 2024-10-18 14:44:18