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() + "]");
}
}
}
分享到:
相关推荐
定时器,定时提醒,定时关机,定时打开执行,可指定时间,倒数计时
这是一种帮助51单片机自动计算定时器初值的软件,使用简单,方便
本文实例讲述了C#定时器实现自动执行的方法。分享给大家供大家参考。具体实现方法如下: 代码如下: //下面讲一个打开窗体定时执行按钮的东西 private void Form1_Load(object sender, EventArgs e) { System.Timers...
cc2530定时器唤醒系统睡眠
N76E003定时器2自动装载延时,用C语言写的,很简单的例子,欢迎学习交流
定时器
基于Verilog HDL设计的定时器系统
MCS51单片机定时器系统1、掌握MCS51单片机定时器/计数器的硬件结构、功能 2、掌握MCS51单片机定时器/计数器 寄存器TMOD 、TCON 3、掌握MCS51单片机定时器/计数器 工作方式 4、掌握MCS51单片机定时器/计数器 的...
stm32 SysTick系统定时器应用代码 已编译成功!
该文档是关于如何开发定时器项目的一些借鉴代码,主要是适用于单片机等设备上。
利用定时器0,实现从1到9999的自动累加计数
ucosii 定时器 消息队列 使用实例
用Protues做的一个定时器,设置定时的时间,定时开始时红灯亮,定时结束时绿灯亮。
spring定时器spring定时器spring定时器spring定时器spring定时器
单片机中断 定时器 欢迎大家的使用 中断系统是一个很重要的概念
555定时器 555定时器 555定时器 555定时器
QQ农场定时器、自动摘取、自动计算收获时间,不同于外挂,瞬间除草、摘取、放草
STM32定时器作为最重要的外设之一,深入的理解其使用方法。内容根据自己项目应用经验和深入研究的精华总结而成的,完全原创!!!第一次上传自己的研究成果,非常欣喜。当然,细节部分有不足之处望提出建议。本文档...
辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 定时器计算器辅助软件 ...
51定时器计算工具,可用于51定时器计算,定时器自动计算