`
zhuhaiyongleo
  • 浏览: 9843 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

定时器,系统自动结贴

阅读更多
1、在web.xml中配置servlet
<servlet>
		<servlet-name>InitializeServlet</servlet-name>
		<servlet-class>
			cn.ename.service.servlet.InitializeServlet
		</servlet-class>
		<load-on-startup>2</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>InitializeServlet</servlet-name>
		<url-pattern>/InitializeServlet</url-pattern>
	</servlet-mapping>


2、在初始化servlet的InitialzeServlet类中的init中调用定时线程
public class InitializeServlet extends HttpServlet {

	private static final long serialVersionUID = -5124879118472659847L;

	protected final static Logger log = Logger.getLogger(InitializeServlet.class);

	
	private static final Timer GcQuestionTimer = new Timer("系统自动结帖任务线程", true);

	public InitializeServlet() {
	}

	public void init() throws ServletException {
		try
		{
			super.init();
			startBackgroudService();

		} catch (Exception e)
		{
			log.error("后台定时服务初始化出现异常", e);
		}
	}



/**
* 定时执行系统自动结帖任务线程
*/
private void gcQuestion() {
		StartGcQuestionTask task = new StartGcQuestionTask();
		int MiniInterval = 1;
		try {
			String[] str = ServiceCfg.getGlobalParam("MiniInterval").split("\\*");
			for (int i=0; i<str.length; i++) {
				MiniInterval *=Integer.parseInt(str[i]);
			}
		} catch (NumberFormatException e) {
			log.warn("定时执行系统自动结帖任务线程时数据类型转化出现异常", e);
			MiniInterval = 24*60*60*1000;
		}
		GcQuestionTimer.schedule(task, TimeUtil.getNextIntervalTime(MiniInterval), MiniInterval);
	}

/**
* 启动后台定时服务
*/
private void startBackgroudService() {
		gcQuestion();
	}

	/**
	 * 停止后台定时服务
	 */
	private void stopBackgroudService() {
		GcQuestionTimer.cancel();
	}

	public void destroy() {
		try
		{
			super.destroy();
			stopBackgroudService();
		} catch (Exception e)
		{
			log.error("销毁后台定时服务失败", e);
		}
	}

}

3、定时执行任务的线程
public class StartGcQuestionTask extends TimerTask {

	private static final Logger log = Logger.getLogger(StartGcQuestionTask.class);
	public static boolean GcQuestionTaskisRunning = false;

	@Override
	public void run() {

		if (log.isDebugEnabled())
		{
			log.debug("系统自动结帖...[" + TimeUtil.timeFomat_y_M_dHms() + "]");
		}
		if (GcQuestionTaskisRunning)
		{
			log.warn("系统自动结帖操作正在运行,当前时间调度任务不执行.");
			return;
		}
		GcQuestionTaskisRunning = true;

		IPosts post = (IPosts) AbstractInnerIfFactory.getInnerInterface(AbstractInnerIfFactory.IPOSTS_INTERFACE_NAME);
		int returnCode = post.gcQuestion();//在这里执行要执行的任务
		switch (returnCode)
		{

			case 0:
				if (log.isDebugEnabled())
				{

					log.debug("当天系统自动结帖的数量为零");
				}
				break;
			case -1:
				log.warn("系统错误,自动结帖操作失败");
				break;
		}

		GcQuestionTaskisRunning = false;

		if (log.isDebugEnabled())
		{
			log.debug("系统自动结帖操作运行结束...[" + TimeUtil.timeFomat_y_M_dHms() + "]");
		}

	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics