在web.xml中配置監聽類。
<listener> <listener-class>com.skin.generate.action.TaskManager</listener-class> </listener>
監聽時間Properties文件配置。
#定時任務配置文件 #定時刷新數據庫實例時間(毫秒) 24*60*60*1000(一天) task.databaseInstance.time=86400000 #定時刷新數據庫實例當天的幾點開始執行1 task.databaseInstance.clock=1 #定時刷新數據庫實例當天的某分鍾開始執行 task.databaseInstance.min=10
實現監聽類,監聽類實現ServletContextListener,contextInitialized 方法會在偵聽器初始化的時候調用。
import java.util.Calendar; import java.util.Date; import java.util.Properties; import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import com.skin.webcat.util.ProPertiesUtils; public class TaskManager implements ServletContextListener{ private Timer timer = null; @Override public void contextInitialized(ServletContextEvent arg0) { Properties proPerties = ProPertiesUtils.getProPerties("task.properties"); timer = new Timer(); CheckDatabaseInstanceTask msendTask = new CheckDatabaseInstanceTask(); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, Integer.valueOf((String) (proPerties.get("task.databaseInstance.clock")))); calendar.set(Calendar.MINUTE, Integer.valueOf((String) (proPerties.get("task.databaseInstance.min")))); calendar.set(Calendar.SECOND, 0); Date date = calendar.getTime(); // 第一次執行定時任務的時間 if (date.before(new Date())) { date = this.addDay(date, 1); } timer.schedule(msendTask, date, Integer.valueOf((String) (proPerties.get("task.databaseInstance.time")))); } @Override public void contextDestroyed(ServletContextEvent arg0) { timer.cancel(); } public Date addDay(Date date, int num) { Calendar startDT = Cale ndar.getInstance(); startDT.setTime(date); startDT.add(Calendar.DAY_OF_MONTH, num); return startDT.getTime(); } }
執行任務類實現,其繼承啦jdk自帶的TimerTask類,在run方法中寫定時任務執行的內容。
import java.util.ArrayList; import java.util.List; import java.util.TimerTask; public class CheckDatabaseInstanceTask extends TimerTask{ /** * 任務邏輯處理方法 */ @Override public void run() { System.out.println("我是處理任務的方法"); } }
