Java监听器的添加以实现执行定时器任务

1、在WEB.xml添加定时器的执行类配置

 

	<listener>
		<listener-class>
			com.cpic.ryx.servlet.TimerListener
		</listener-class>
	</listener>

 

2、监听器类的配置

 

public class TimerListener extends HttpServlet implements
		ServletContextListener {
	private static final long serialVersionUID = 200601509800003l;

	private static Logger log = Logger.getLogger(TimerListener.class);

	/**
	 * 初始化定时任务线程
	 * 
	 * @param sce
	 *            ServletContextEvent
	 */
	public void contextInitialized(ServletContextEvent sce) {
		log.info("TimerListener[ServletContextListener] initializing...");
		try {
			BatchMain.getInstance().startTask();
		} catch (Exception e) {
					}
		log.info("...TimerListener[ServletContextListener] initialized");
	}

	/**
	 * 销毁定时任务线程
	 * 
	 * @param sce
	 *            ServletContextEvent
	 */
	public void contextDestroyed(ServletContextEvent sce) {
		log.info("TimerListener[ServletContextListener] destoring...");
		BatchMain.getInstance().destoryTask();
		log.info("...TimerListener[ServletContextListener] destoried.");
	}
}

 3、 执行类的配置

 

public class BatchMain {
	private static Logger log = Logger.getLogger(BatchMain.class);

	private static BatchMain instance;

	// 任务调度定时器
	private Timer timer;

	private Timer billTimer;

	private BatchMain() {
		timer = new Timer();
		billTimer = new Timer();
	}

	public synchronized static BatchMain getInstance() {
		if (instance == null) {
			instance = new BatchMain();
		}
		return instance;
	}

	/**
	 * 启动指定任务线程
	 * 
	 */
	public void startTask() {

				TimerTask schemeCancelTask = new SchemeCancelTask();
				schemeTimer.schedule(schemeCancelTask, 1000, schemeCancelPeriod * 1000L);
			
			log.info("...完成增加方案自动作废任务[schemeCancelPeriod:"
					+ schemeCancelPeriod + " s].");

		
	}

	/**
	 * 启动指定任务线程
	 * 
	 */
	public void destoryTask() {
		log.info("BatchMain startTask canceling...");
		timer.cancel();
		billTimer.cancel();
		log.info("...BatchMain startTask canceled");
	}
}

 

 

4、定时器任务类的配置:

 

public class SchemeCancelTask extends TimerTask {

	private static Logger log = Logger.getLogger(SchemeCancelTask.class);

	public SchemeCancelTask() {

	}

	public void run() {

		String taskSchemeMaxTime = ConfigUtil
				.getConfigValue(ConfigUtil.TASK_SCHEME_MAX_TIME);
		String schemeStartHour = ConfigUtil
				.getConfigValue(ConfigUtil.TASK_SCHEME_STARTHOUR);
		String schemeStartMinute = ConfigUtil
				.getConfigValue(ConfigUtil.TASK_SCHEME_STARTMINUTE);
		String schemeEndHour = ConfigUtil
				.getConfigValue(ConfigUtil.TASK_SCHEME_END_HOUR);
		String schemeEndMinute = ConfigUtil
				.getConfigValue(ConfigUtil.TASK_SCHEME_END_MINUTE);

		Calendar c = Calendar.getInstance();

		c.set(Calendar.HOUR_OF_DAY, Integer.parseInt(schemeStartHour));
		c.set(Calendar.MINUTE, Integer.parseInt(schemeStartMinute));
		Date schemeStartDate = new Date(c.getTimeInMillis());

		c.set(Calendar.HOUR_OF_DAY, Integer.parseInt(schemeEndHour));
		c.set(Calendar.MINUTE, Integer.parseInt(schemeEndMinute));
		Date schemeEndDate = new Date(c.getTimeInMillis());

		Date currentDate = new Date();

		// 在规定的时间段内运行
		if (currentDate.after(schemeStartDate) && currentDate.before(schemeEndDate)) {
			
			log.info("方案自动作废线程开始执行.....................");
			log.info("方案自动作废开始时间:"
					+ DateUtil.toString(schemeStartDate,
							DateUtil.DATE_FORMAT_DATETIME)
					+ "方案自动作废结束时间:"
					+ DateUtil.toString(schemeEndDate,
							DateUtil.DATE_FORMAT_DATETIME));
			log.info("....方案作废自动线程自动执行结束");

		}
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值