在web.xml中配置监听类。
com.skin.generate.action.TaskManager
监听时间Properties文件配置。
#定时任务配置文件#定时刷新数据库实例时间(毫秒) 24*60*60*1000(一天)task.databaseInstance.time=86400000#定时刷新数据库实例当天的几点开始执行1task.databaseInstance.clock=1#定时刷新数据库实例当天的某分钟开始执行task.databaseInstance.min=10
实现监听类,监听类实现ServletContextListener,contextInitialized 方法会在侦听器初始化的时候调用。
import java.util.Calendar;import java.util.Date;import java.util.Properties;import java.util.Timer;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import com.skin.webcat.util.ProPertiesUtils;public class TaskManager implements ServletContextListener{ private Timer timer = null; @Override public void contextInitialized(ServletContextEvent arg0) { Properties proPerties = ProPertiesUtils.getProPerties("task.properties"); timer = new Timer(); CheckDatabaseInstanceTask msendTask = new CheckDatabaseInstanceTask(); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf((String) (proPerties.get("task.databaseInstance.clock")))); calendar.set(Calendar.MINUTE, Integer.valueOf((String) (proPerties.get("task.databaseInstance.min")))); calendar.set(Calendar.SECOND, 0); Date date = calendar.getTime(); // 第一次执行定时任务的时间 if (date.before(new Date())) { date = this.addDay(date, 1); } timer.schedule(msendTask, date, Integer.valueOf((String) (proPerties.get("task.databaseInstance.time")))); } @Override public void contextDestroyed(ServletContextEvent arg0) { timer.cancel(); } public Date addDay(Date date, int num) { Calendar startDT = Cale ndar.getInstance(); startDT.setTime(date); startDT.add(Calendar.DAY_OF_MONTH, num); return startDT.getTime(); } }
执行任务类实现,其继承啦jdk自带的TimerTask类,在run方法中写定时任务执行的内容。
import java.util.ArrayList;import java.util.List;import java.util.TimerTask;public class CheckDatabaseInstanceTask extends TimerTask{ /** * 任务逻辑处理方法 */ @Override public void run() { System.out.println("我是处理任务的方法"); }}