实例讲解java定时任务
程序员文章站
2024-03-06 11:14:01
今天为大家分享的一个经验就是java的定时任务,就是说在一天的某个时间点执行以下代码。
public class timermanager {
//时间...
今天为大家分享的一个经验就是java的定时任务,就是说在一天的某个时间点执行以下代码。
public class timermanager { //时间间隔 private static final long period_day = 24 * 60 * 60 * 1000; public timermanager() { calendar calendar = calendar.getinstance(); /*** 定制每日2:00执行方法 ***/ calendar.set(calendar.hour_of_day, 2); 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 timer = new timer(); nfdflightdatatimertask task = new nfdflightdatatimertask(); //安排指定的任务在指定的时间开始进行重复的固定延迟执行。 timer.schedule(task,date,period_day); } // 增加或减少天数 public date addday(date date, int num) { calendar startdt = calendar.getinstance(); startdt.settime(date); startdt.add(calendar.day_of_month, num); return startdt.gettime(); } }
在timermanager 这个类里面,大家一定要注意时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后发布的程序或是重启过服务,那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点执行。为了,避免这种情况发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。
public class nfdflightdatatimertask extends timertask { private static logger log = logger.getlogger(nfdflightdatatimertask.class); @override public void run() { try { //在这里写你要执行的内容 } catch (exception e) { log.info("-------------解析信息发生异常--------------"); } } } public class nfdflightdatatasklistener implements servletcontextlistener { public void contextinitialized(servletcontextevent event) { new timermanager(); } public void contextdestroyed(servletcontextevent event) { } }
然后要在web.xml里面配置监听器
<listener> <listener-class> com.listener.nfdflightdatatasklistener </listener-class> </listener>
以上就是本文的全部内容,希望对大家的学习有所帮助。