• 2024-12-04
宇哥博客 后端开发 Java Web Timer定时器每天固定时间运行

Java Web Timer定时器每天固定时间运行

java.util.Timer定时器

timer.schedule(task, 0); //表示没有延迟,立即执行一次task
timer.schedule(task, 1000); //延迟1秒,执行一次task
timer.schedule(task, 1000*3, 1000*5); //延迟3秒执行一次task,然后每隔5秒执行一次task

如果要每天固定时间点执行,下面例子:

TaskManager.java

package com.listener;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class TaskManager implements ServletContextListener {
	
	SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	
	private Timer timer = null;
    
	//一天的毫秒数
	long daySpan = 24 * 60 * 60 * 1000;
    //设定每天XX:XX:XX运行
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 11:47:00");
   
    
    @Override
    public void contextInitialized(ServletContextEvent event) {
        // TODO 自动生成的方法存根
        timer = new java.util.Timer(true);
        System.out.println("------------定时器已启动----------------");
        
        try {
        	//首次运行时间
			Date startTime = formatter.parse(sdf.format(new Date()));
			// 如果今天的已经过了 首次运行时间就改为明天
			if(System.currentTimeMillis() > startTime.getTime()){
				startTime = new Date(startTime.getTime() + daySpan);
				System.out.println("当前已过设定时间,明天再执行...延时时间:" + startTime);
			}
			
			//arg1:timertask
			//arg2:延迟时间
			//arg3:第一次调用之后,从第二次开始每隔多长的时间调用一次
			timer.schedule(new TimeTask(), startTime,  daySpan );
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        System.out.println("------------已经添加任务调度表-------------");
    }
    
    @Override
    public void contextDestroyed(ServletContextEvent event) {
        // TODO 自动生成的方法存根
        System.out.println("--------------定时器销毁-------------");
        //timer.cancel();
    }
}

TimeTask.java

package com.listener;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;

public class TimeTask extends TimerTask{
	SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	 /**
	   * RUN方法放入一个SCHEDULE的时候 进行执行 一个定时程序执行的进口
	  */
	  public void run() {
	     System.out.println("每天固定时间运行");
	  }
}

web.xml配置文件

   <listener>
      <listener-class>com.listener.TaskManager</listener-class>
  </listener>
本文来自网络,不代表本站立场,转载请注明出处。https://www.ygbks.com/1154.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部