java ServletContextListener 定时器某个时刻执行事件

来源:互联网 发布:mysql add unique 编辑:程序博客网 时间:2024/05/15 01:47

设置定时器,每天固定时间执行一次事件UpdateMessageTask

public class EventListener implements ServletContextListener {private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;private Timer timer = null;@Overridepublic void contextDestroyed(ServletContextEvent arg0) {if (timer != null) {timer.cancel();}}@Overridepublic void contextInitialized(ServletContextEvent arg0) {timer = new Timer(true);arg0.getServletContext().log("定时器启动");Calendar calendar = Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY, 1); // 凌晨1点calendar.set(Calendar.MINUTE, 0);calendar.set(Calendar.SECOND, 0);Date date = calendar.getTime(); // 第一次执行定时任务的时间// 如果第一次执行定时任务的时间 小于当前的时间// 此时要在 第一次执行定时任务的时间加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。if (date.before(new Date())) {date = this.addDay(date, 1);}timer.schedule(new UpdateMessageTask(), date, PERIOD_DAY);// 隔一天执行一次}// 增加或减少天数private Date addDay(Date date, int num) {Calendar startDT = Calendar.getInstance();startDT.setTime(date);startDT.add(Calendar.DAY_OF_MONTH, num);return startDT.getTime();}}public class UpdateMessageTask extends TimerTask {@Overridepublic void run() {timerTask();}private void timerTask() {System.out.printIn("定时任务执行");}}


0 0