package com.jit.util; import java.io.IOException; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class KQServlet extends HttpServlet { private static final long serialVersionUID = 1L; public KQServlet() { super(); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } @Override public void destroy() { super.destroy(); } @Override public void init() throws ServletException { // 启动定时器 System.out.println("启动定时器"); String hour = (String) this.getServletConfig().getInitParameter("Time"); new KQTaskManager(hour); } }
package com.jit.util; import java.util.Calendar; import java.util.Date; import java.util.Timer; public class KQTaskManager { private static final long PERIOD_DAY = 1000 * 60*60*24; public KQTaskManager(String hour) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(hour)); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); Date date = cal.getTime(); // 如果第一次执行定时任务的时间 小于 当前的时间 // 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行 if (date.before(new Date())) { date = this.addDay(date, 1); } Timer timer = new Timer(); // 将任务实例化 KQTask task = new KQTask(); // 将任务装载到任务调度中 System.out.println("将任务装载到任务调度中!!"); timer.schedule(task, date, PERIOD_DAY); } // 增加减少天数 public Date addDay(Date date, int num) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.DAY_OF_MONTH, num); return cal.getTime(); } }
package com.jit.util; import java.util.List; import java.util.TimerTask; import jit.wau.dbbean.UpdateDB; import org.apache.log4j.Logger; public class KQTask extends TimerTask { private static Logger log = Logger.getLogger(KQTask.class); private UpdateDB dbbean; private UpdateDB dbbean_kq; // private static final String dataSourceOTA = "java:comp/env/OTA"; private KQGetDataSource source = new KQGetDataSource(); /* * run方式是定时器的主要实现方法 里面需要执行每天对考勤数据的查询和数据的插入 */ @Override public void run() { // 每个任务都需要初始化dbbean 再将dbbean清理掉 System.out.println("定时器开始工作!!!!"); dbbean = source.getDBean(KQDataSource.SOURCE_OTA); dbbean_kq = source.getDBean(KQDataSource.SOURCE_KQDS); try { KQDataSelect select = new KQDataSelect(dbbean, dbbean_kq); List<KQDep> kqdepList = select.getKQInfo(); if (kqdepList != null) { System.out.println("考勤部门数据查询成功!!!!!!!!!"); } KQDataInsert insert = new KQDataInsert(dbbean, dbbean_kq); int flag = insert.insertKQInfo(kqdepList); if (flag > 0) { System.out.println("考勤部门数据插入成功!!!!!!!!!!!"); dbbean.commitToDB(); } else { dbbean.rollBackDB(); } } catch (Exception e) { e.printStackTrace(); dbbean.cleanUp(); dbbean_kq.cleanUp(); } finally { dbbean.cleanUp(); dbbean_kq.cleanUp(); } System.out.println("定时器结束工作!!!!"); } public KQTask() { } }