当前使用的是Timer进行定时任务,Timer同时指定多久后开始执行以及执行周期。
//开启监听
public class TimerManagerListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
new TimerManager();
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
}
//简易定时任务管理
public class TimerManager {
Properties properties = new Properties();
public TimerManager() {
try {
//读取配置文件
properties.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream("timer.properties"),"UTF-8"));
long PERIOD_DAY = Integer.parseInt(properties.getProperty("periodDay")) * 60 * 60 * 1000;
// 获取并处理配置文件中的时间
String backuptime = properties.getProperty("backuptime");
String[] time = backuptime.split(":");
int hours = Integer.parseInt(time[0]);
int minute = Integer.parseInt(time[1]);
int second = Integer.parseInt(time[2]);
Calendar calendar = Calendar.getInstance();
/*** 定制每日24:00执行方法 ***/
calendar.set(Calendar.HOUR_OF_DAY, hours);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, second);
Date date = calendar.getTime(); // 第一次执行定时任务的时间
// 如果第一次执行定时任务的时间 小于 当前的时间
// 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
Timer timer = new Timer();
BackUpTimerTask task = new BackUpTimerTask();
// 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
timer.schedule(task, date, PERIOD_DAY);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 增加或减少天数
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
}
//定时任务
public class BackUpTimerTask extends TimerTask {
@Override
public void run() {
try {
new BackupDb();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//内容
public class BackupDb {
System.out.println("hello world");
}
配置文件
timer.properties 配置文件
periodDay=24
backuptime=24:00:00
web.xml文件中添加listener
<listener>
<listener-class>com.listener.TimerManagerListener</listener-class>
</listener>