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("....方案作废自动线程自动执行结束");
}
}
}