java定时器例子

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() {

	}

}

你可能感兴趣的:(java)