當前使用的是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>