java定时器

第一步:

    在web.xml 添加监听:

<listener>
            //此处为你所要调用的java文件路径
	    <listener-class>?.?.?.?.LyzListener</listener-class>
</listener>

 

第二步:

   编写java类进行调用

public class LyzListener implements  ServletContextListener {
    //类初始化时去实例化TimerManager类。
    public void contextInitialized(ServletContextEvent sce) {
         new TimerManager();
    }
 
    public void contextDestroyed(ServletContextEvent sce) {
        // TODO Auto-generated method stub
         
    }
 
}

第三步:

   编写TimerManger 时间类,设置运行时间及运行间隔

public class TimerManager {
	//时间间隔
    private static final long PERIOD_DAY =24*60*60 * 1000;
    public  TimerManager() {
         Calendar calendar = Calendar.getInstance(); 
                
         /*** 定制每日0:00执行方法 ***/

         calendar.set(Calendar.HOUR_OF_DAY,0);//hh
         calendar.set(Calendar.MINUTE,0);//mm	
         calendar.set(Calendar.SECOND, 0);//ss
          
         Date date=calendar.getTime(); //第一次执行定时任务的时间
         System.out.println(date);
         System.out.println("before 方法比较:"+date.before(new Date()));
         //如果第一次执行定时任务的时间 小于 当前的时间
         //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。循环执行的周期则以当前时间为准
           if (date.before(new Date())) {
             date = this.addDay(date, 1);
             System.out.println(date);
         }
          
         Timer timer = new Timer();
          
         LyzTimerTask task = new LyzTimerTask();
         //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
         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();
        }

}

第四部:

  编写你想要定时循环的java类(若是想调用service层可以通过下面代码实现)

//添加该注解
//关键1
@Component
public class LyzTimerTask extends TimerTask {
   
   //注入service
    @Autowired
	private WcWorkcardService workcardService;
  
   //关键2
    public static LyzTimerTask tokenUtil;  
    
    // 关键3
    @PostConstruct
    public void init() {
        tokenUtil = this;
    }
//通过tokenUtil.workcardService(注入的service).方法名即可调用
原文地址:https://www.cnblogs.com/AsaltedFish/p/10233917.html