您的位置:首页 > 编程语言 > Java开发

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

2015-05-06 15:38 471 查看
[java] view
plaincopy

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

[java] view
plaincopy

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,在容器启动的时候触发定时事件:

[java] view
plaincopy

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中这样配置:

[html] view
plaincopy

<listener>

<listener-class>

com.shutao.test.StartupListener

</listener-class>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: