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>
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>
相关文章推荐
- java定时执行任务--Timer的使用
- java关于Timer schedule执行定时任务 1、在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等
- java定时任务,每天定时执行任务(JDK TimerTask)
- java Timer 定时每天凌晨1点执行任务
- java的调度器timer定时执行指定任务
- Java:利用java Timer类实现定时执行任务的功能
- java关于Timer schedule执行定时任务
- 【Java】利用Timer与TimerTask定时执行任务
- java的Timer,定时执行某个任务
- java Timer 定时每天凌晨1点执行任务
- java Timer 定时每天凌晨23点执行任务
- Java里timer执行定时任务
- java定时任务,每天定时执行任务(JDK TimerTask)
- java Timer ,TimerTask执行定时任务
- java关于Timer schedule执行定时任务
- JAVA中使用Timer,TimerTask轮循数据库,执行定时任务
- java关于Timer schedule执行定时任务
- java学习—— Timer执行定时任务
- java Timer 定时每天凌晨1点执行任务
- Java定时任务:利用java Timer类实现定时执行任务的功能