java 定时任务-servlet
在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("我是处理任务的方法"); } }