Java定时器

代码


import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimerUtil implements ServletContextListener {


    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {

        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        calendar.set(year, month, day, 00, 30, 00);
        // 当天00点30(默认执行时间)
        Date defaultdate = calendar.getTime();
        Date sendDate = null;
        if (defaultdate.before(new Date())) {
            // 若当前时间超过了defaultdate时间,当天不再执行,则将执行时间sendDate改为明天00点30
            calendar.add(Calendar.DATE, 1);
            sendDate = calendar.getTime();
        }else {
            // 若当前时间没有超过defaultdate时间,则将执行时间sendDate改为defaultdate
            sendDate = defaultdate;
        }

        /**
         * ----------------每日任务 ----------------
         * 启动服务器后,若此时时间没过00点30,等待。到了00点30自动执行一次,24小时后(第二天00点30)再执行一次,周而复始
         * 启动服务器后,若此时时间已经超过00点30,则等到24小时后(第二天00点30)才执行一次,周而复始
         */
        Timer dTimer = new Timer();
        dTimer.schedule(new TimerTask() {

            @Override
            public void run() {

                System.out.println("每日任务已经执行");
            }
        }, sendDate, 24 * 60 * 60 * 1000);// 定时24小时:24 * 60 * 60 * 1000
        System.out.println("每日定时删除参会通知--已启动!--已启动!");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("每日定时删除参会通知 --已关闭!");
    }
}

在web.xml中设置监听文件

<web-app>  
  <listener>
    <listener-class>  代码路径  </listener-class>
  </listener>
</web-app>

重新部署项目,启动tomcat即可自动执行

posted @ 2021-11-29 11:55  GKGKGK  阅读(285)  评论(0编辑  收藏  举报