我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 运维优化 > java定时任务每天执行TimerTask 使用方法
总共48086条微博

动态微博

查看: 2541|回复: 0

java定时任务每天执行TimerTask 使用方法

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2014-06-04 21:20:41 |只看该作者 |倒序浏览
    ReportTask:
    /**
    * Copyright (c) 2010-2013 by  科帮网
    * All rights reserved.
    */
    package com.Task;

    import java.util.TimerTask;

    import javax.servlet.ServletContext;

    import org.springframework.web.context.ContextLoader;

    import com.acts.resultProcessing.analysis.AnalysisManage;

    /**
    *@Function: 定时任务
    *@Class Name: ReportTask
    *@Author: 科帮网
    *@Date: 2014-6-4
    *@Modifications:
    *@Modifier Name; Date; The Reason for Modifying
    *
    */
    public class ReportTask extends TimerTask {

            
            /**
             *@Function: 任务执行
             *@Author: 科帮网
             *@Date: 2014-6-4
             *@Modifications:
             *@Modifier Name; Date; The Reason for Modifying
             *
             */
            @Override
            public void run() {
                //任务执行方法
            }
            
            
    }

    TaskTimerManage:
    /**
    * Copyright (c) 2010-2012 by  科帮网
    * All rights reserved.
    */
    package com.Task;

    import java.util.Calendar;
    import java.util.Date;
    import java.util.Timer;

    /**
    * TODO
    * @author 科帮网
    * @date 2014-6-4
    */
    public class TaskTimerManage {
            // 时间间隔
            private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;

            private Timer timer = null;
            
            /**
             *
             *@Function: 启动定时器
             *@Author:  科帮网
             *@Date: 2014-6-4
             *@Modifications:
             *@Modifier Name; Date; The Reason for Modifying
             *
             */
            public void start(){
                    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 = new Timer(true);
                    ReportTask reportTask = new ReportTask();
                    timer.schedule(reportTask, date, PERIOD_DAY);
            }
            
            /**
             *
             *@Function: 停止定时器
             *@Author:  科帮网
             *@Date: 2014-6-4
             *@Modifications:
             *@Modifier Name; Date; The Reason for Modifying
             *
             */
            public void stop(){
                    if(timer!=null){
                            timer.cancel();
                    }
            }
            /**
             *
             *@Function: 增加或减少天数
             *@Author:  科帮网
             *@param date
             *@param num
             *@return  Date
             *@Date: 2014-6-4
             *@Modifications:
             *@Modifier Name; Date; The Reason for Modifying
             *
             */
            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点执行。为了,避免这种情况
    发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。
    StartUpListener:
    1. /**
    2. * Copyright (c) 2010-2013 by  科帮网
    3. * All rights reserved.
    4. */
    5. package com.Task;

    6. import javax.servlet.ServletContextEvent;
    7. import javax.servlet.ServletContextListener;

    8. /**
    9. *@Function: 监听
    10. *@Class Name: StartUpListener
    11. *@Author: 科帮网
    12. *@Date: 2014-6-4
    13. *@Modifications:
    14. *@Modifier Name; Date; The Reason for Modifying
    15. *
    16. */
    17. public class StartUpListener implements ServletContextListener {

    18.         private TaskTimerManage taskTimerManage = null;
    19.         /**
    20.          *@Function: 销毁
    21.          *@param arg0
    22.          *@Author: 科帮网
    23.          *@Date: 2014-6-4
    24.          *@Modifications:
    25.          *@Modifier Name; Date; The Reason for Modifying
    26.          *
    27.          */
    28.         @Override
    29.         public void contextDestroyed(ServletContextEvent event) {
    30.                 if(taskTimerManage!=null){
    31.                         taskTimerManage.stop();
    32.                 }
    33.         }

    34.         /**
    35.          *@Function: 初始化
    36.          *@param arg0
    37.          *@Author: 科帮网
    38.          *@Date: 2014-6-4
    39.          *@Modifications:
    40.          *@Modifier Name; Date; The Reason for Modifying
    41.          *
    42.          */
    43.         @Override
    44.         public void contextInitialized(ServletContextEvent event) {
    45.                 taskTimerManage = new TaskTimerManage();
    46.                 taskTimerManage.start();
    47.         }


    48. }
    复制代码

    web.xml配置:
    1.         <listener>
    2.      <listener-class>
    3.        com.Task.StartUpListener
    4.     </lstener-class>
    5.         </lstener>
    复制代码
    java定时任务每天执行TimerTask 使用方法.zip (9.32 KB, 下载次数: 0, 售价: 30 IT币)



    我的日常 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与我的日常享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和我的日常的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、我的日常管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表