美文网首页
JAVA三种方式完成定时任务

JAVA三种方式完成定时任务

作者: 莫小归 | 来源:发表于2018-08-02 11:50 被阅读0次

    参考:https://www.jianshu.com/p/db1611a16cb8

    需求:在某个时间点一定时间后,定时执行任务

    思路:
    1.使用JDK自带Timer;
    2.JDK1.5新增的ScheduledExecutorService;
    3.使用Quartz(JAVA作业调度框架);
    4.Spring3.0自带task
    下面介绍自己使用第一种方法完成需求的过程,后三种方法未亲测,可移步参考链接了解

    1.Timer类主要方法
    该类允许调度一个java.util.TimerTask任务,主要方法如下
    *schedule(TimerTask task, long delay) 延迟 delay 毫秒后,执行task
    *schedule(TimerTask task, Date time) 在特定时间time执行task
    *schedule(TimerTask task, long delay, long period) 延迟delay后执行task,并每隔period执行一次

    2.JAVA代码
    继承TimerTask类的TimerNotifyUtil,定时发送提醒消息类,提醒次日有预约的用户

    import java.text.SimpleDateFormat;
    import java.util.*;
    
    public class TimerNotifyUtil extends TimerTask {
        public void run() {
            //获得次日日期
            Calendar cal = Calendar.getInstance();
            cal.add(Calendar.DATE,1);
            String tomorrow = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
    
            //通过日期查询数据库预约记录
            SQLUtil sUtil = new SQLUtil();
            List<Map<String,String>> appNotify = sUtil.queryAppNotifyMap(tomorrow);
            for (Map<String,String> temp: appNotify) {
                  //就每条需要发送提醒的记录调用发送提醒的方法
            }
        }
    }
    

    设置发送提醒消息的线程,定时启动TimerNotifyUtil

    import com.dandelion.util.TimerNotifyUtil;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Timer;
    
    public class TimerNotifyThread implements Runnable {
    
         //时间间隔
        private static final long PERIOD_DAY = 24*60*60*1000;
    
         public void run() {
             log.info("进入定时发送咨询提醒功能!");
             Calendar calendar = Calendar.getInstance();
             calendar.set(Calendar.HOUR_OF_DAY,20);
             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方法定时循环执行
             Timer timer = new Timer();timerNotifyUtil任务
             TimerNotifyUtil timerNotifyUtil = new TimerNotifyUtil();
             timer.schedule(timerNotifyUtil,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();
        }
    

    日暮汉宫传蜡烛,轻烟散入五侯家

    相关文章

      网友评论

          本文标题:JAVA三种方式完成定时任务

          本文链接:https://www.haomeiwen.com/subject/ynyjvftx.html