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

写了一个Timer的工具类,比较通用,用于定时执行某个任务,时间可以自定义配置
package com.shutao.test.schedule;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class TimerUtil {
	//默认时间间隔一天
	 private static long PERIOD_TIME = 24 * 60 * 60 * 1000;	 
	 Log log = LogFactory.getLog(TimerUtil.class);
	 /**
	  * 执行定时任务
	  * @param myTask 要执行的任务
	  * @param dayInterval 每隔多少天执行一次任务
	  * @param hour 每隔多少天在几点执行任务
	  * @param minute 每隔多少天在几点几分执行任务
	  * @author linshutao
	  * */
	 public void startMyTask(TimerTask myTask,int dayInterval,int hour,int minute){
		 PERIOD_TIME =  dayInterval * 24 * 60 * 60 * 1000;
		 Calendar calendar = Calendar.getInstance();
		 calendar.set(Calendar.HOUR_OF_DAY, hour);
		 calendar.set(Calendar.MINUTE, minute);	
		 calendar.set(Calendar.SECOND, 0);
		 //执行定时任务的时间	
		 Date date=calendar.getTime(); 
		 //为了避免若容器启动的时间晚于定时时间,在重启容器的时候会立刻执行任务,这里进行处理
		 if (date.before(new Date())) {
			   date = this.addDay(date, 1);
		 }
		 Timer timer = new Timer();
		//任务在指定的时间开始进行重复的固定延迟执行
		 timer.schedule(myTask,date);
	 }
	 

	  public Date addDay(Date date, int num) {
	   Calendar startDT = Calendar.getInstance();
	   startDT.setTime(date);
	   startDT.add(Calendar.DAY_OF_MONTH, num);
	   return startDT.getTime();
	  }

}

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

public class StartupListener extends ContextLoaderListener
    implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
	String day = AppConfig.getProperty(AppConfig.REBUILDINDEX_DAY);//获取配置文件中对定时任务的时间配置,若没配置则为每天凌晨1点分执行
		String hour = AppConfig.getProperty(AppConfig.REBUILDINDEX_HOUR);
		String minute = AppConfig.getProperty(AppConfig.REBUILDINDEX_MINUTE);
		//定时重建索引
		day=day==null?"1":day;
		hour=hour==null?"1":hour;
		minute=minute==null?"0":minute;
		new TimerUtil().startMyTask(new RebuildIndexTask(),
				Integer.parseInt(day), Integer.parseInt(hour), Integer.parseInt(minute));
}
public void contextDestroyed(ServletContextEvent event) {
}


web.xml中这样配置:

	<listener>
		<listener-class>
			com.shutao.test.StartupListener
		</listener-class>
	</listener>



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值