定时在00:00:00执行任务

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

public class HandleTimerTask implements ServletContextListener {

 private Timer timer = null;      //定时器
 private static int DOWNlOAD_HOUR = 0;    //执行任务开始时间(时)
 private static int DOWNlOAD_MINUTE = 0;   //执行任务开始时间(分)
 private static int DOWNlOAD_SECOND = 0;   //执行任务开始时间(秒)
 private long delay;        //延时时间值(当前系统时间到下载时间之间的时间差毫秒数)
 
 public void contextInitialized(ServletContextEvent event) {
  init();//初始化参数
  timer = new Timer(true);//创建Timer对象
  //定时执行程序
  timer.schedule(new Handle(event.getServletContext()),delay,24*60*60*1000);//调用Handle()类(即每天要执行的任务),delay表示延迟毫秒数,0,24*60*60*1000表示每隔一天执行一次任务,60*60*1000表示一个小时;
 }

 public void contextDestroyed(ServletContextEvent event) {
  timer.cancel();
 }
 
 /**
  * 初始化参数
  * @return
  */
 public void init(){
  //声明一个Calendar对象
  Calendar cal = Calendar.getInstance();
  //设置时间
        cal.set(Calendar.HOUR_OF_DAY, DOWNlOAD_HOUR);
        cal.set(Calendar.MINUTE, DOWNlOAD_MINUTE);
        cal.set(Calendar.SECOND, DOWNlOAD_SECOND);
        Date date = new Date();
        //获取设定的时间
        date = cal.getTime();
        //声明当前时间
        Date now = new Date();
        //获取设定的时间和当前的时间差(毫秒数)
        long interval = date.getTime() - now.getTime();
        //如果当前时间大于下载时间,则将下载时间设置为下一个下载时间
        if (interval < 0) {
            cal.add(Calendar.DAY_OF_MONTH, 1);//将天数加1
            date = cal.getTime();
            //获取设定的时间和当前的时间差(毫秒数)
            interval = date.getTime() - now.getTime();
        }      
        this.startTime = date;//初始化开始下载时间
        this.delay = interval;//初始化当前时间到下载时间之间的时间差
 }
}

 


public class Handle extends TimerTask {

 private ServletContext context = null;
 Timer timer = null;      //查询任务定时器
 
 public Handle(ServletContext context)
 {
  this.context = context;
 }

 /**
  * 开始执行
  */
 public void run() {
  //开始执行
        context.log("开始执行!");
 }
}


用延迟时间可以实现,添加了一个init()方法用来计算延时数,不管什么时候启动服务,都可以根据当前系统时间和执行任务的开始时间计算出延时时间毫秒数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值