指定程序在每天凌晨2点运行:
1.初始化定时器
public void contextInitialized(ServletContextEvent arg0) { //自定义时间执行::::凌晨2点 Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 2); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); Date date = cal.getTime(); //第一次执行定时任务的时间 每天早上2点 //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。 if(date.before(new Date())){ date = this.addDay(date,1); } //0替换成cal.getTime(); timer = new Timer(); timer.schedule(new TimerTask(){ @Override public void run() { logger.info("每天0点开始执行取数"); GetWid(); //需要运行的方法 } }, date, 1000*60*60*24); }
2. 构建修改日期的方法
/** * 如果当前重启服务或者执行任务超过了设定的时间,程序会立即运行,需要在当前日期+1 * @param date * @param i * @return */ private Date addDay(Date date, int num) { Calendar startDT = Calendar.getInstance(); startDT.setTime(date); startDT.add(Calendar.DAY_OF_MONTH, num); return startDT.getTime(); }