java的Timer,定时执行某个任务

[java]  view plain copy
  1. 写了一个Timer的工具类,比较通用,用于定时执行某个任务,时间可以自定义配置  
[java]  view plain copy
  1. package com.shutao.test.schedule;  
  2.   
  3. import java.text.SimpleDateFormat;  
  4. import java.util.Calendar;  
  5. import java.util.Date;  
  6. import java.util.Timer;  
  7. import java.util.TimerTask;  
  8.   
  9. import org.apache.commons.logging.Log;  
  10. import org.apache.commons.logging.LogFactory;  
  11.   
  12. public class TimerUtil {  
  13.     //默认时间间隔一天  
  14.      private static long PERIOD_TIME = 24 * 60 * 60 * 1000;    
  15.      Log log = LogFactory.getLog(TimerUtil.class);  
  16.      /** 
  17.       * 执行定时任务 
  18.       * @param myTask 要执行的任务 
  19.       * @param dayInterval 每隔多少天执行一次任务 
  20.       * @param hour 每隔多少天在几点执行任务 
  21.       * @param minute 每隔多少天在几点几分执行任务 
  22.       * @author linshutao 
  23.       * */  
  24.      public void startMyTask(TimerTask myTask,int dayInterval,int hour,int minute){  
  25.          PERIOD_TIME =  dayInterval * 24 * 60 * 60 * 1000;  
  26.          Calendar calendar = Calendar.getInstance();  
  27.          calendar.set(Calendar.HOUR_OF_DAY, hour);  
  28.          calendar.set(Calendar.MINUTE, minute);   
  29.          calendar.set(Calendar.SECOND, 0);  
  30.          //执行定时任务的时间      
  31.          Date date=calendar.getTime();   
  32.          //为了避免若容器启动的时间晚于定时时间,在重启容器的时候会立刻执行任务,这里进行处理  
  33.          if (date.before(new Date())) {  
  34.                date = this.addDay(date, 1);  
  35.          }  
  36.          Timer timer = new Timer();  
  37.         //任务在指定的时间开始进行重复的固定延迟执行  
  38.          timer.schedule(myTask,date);  
  39.      }  
  40.        
  41.   
  42.       public Date addDay(Date date, int num) {  
  43.        Calendar startDT = Calendar.getInstance();  
  44.        startDT.setTime(date);  
  45.        startDT.add(Calendar.DAY_OF_MONTH, num);  
  46.        return startDT.getTime();  
  47.       }  
  48.   
  49. }  

接下来写一个listener,在容器启动的时候触发定时事件:

[java]  view plain copy
  1. public class StartupListener extends ContextLoaderListener  
  2.     implements ServletContextListener {  
  3. public void contextInitialized(ServletContextEvent event) {  
  4.     String day = AppConfig.getProperty(AppConfig.REBUILDINDEX_DAY);//获取配置文件中对定时任务的时间配置,若没配置则为每天凌晨1点分执行  
  5.         String hour = AppConfig.getProperty(AppConfig.REBUILDINDEX_HOUR);  
  6.         String minute = AppConfig.getProperty(AppConfig.REBUILDINDEX_MINUTE);  
  7.         //定时重建索引  
  8.         day=day==null?"1":day;  
  9.         hour=hour==null?"1":hour;  
  10.         minute=minute==null?"0":minute;  
  11.         new TimerUtil().startMyTask(new RebuildIndexTask(),  
  12.                 Integer.parseInt(day), Integer.parseInt(hour), Integer.parseInt(minute));  
  13. }  
  14. public void contextDestroyed(ServletContextEvent event) {  
  15. }  


web.xml中这样配置:

[html]  view plain copy
  1. <listener>  
  2.     <listener-class>  
  3.         com.shutao.test.StartupListener  
  4.     </listener-class>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值