TimerTask自动删除订单(定时器)

1.以下是在servlet3.0中实现自动删除订单功能

package net.wxcms.koubeichi.listener;

import java.util.TimerTask;

import javax.servlet.ServletContext;

import net.wxcms.koubeichi.dao.OrderDao;
/*
 * 自动删除订单
 */
public class OrderDelTask extends TimerTask{
	private static boolean isRunning = false;
	  private ServletContext context = null;
	  public OrderDelTask() {
	  }
	  public OrderDelTask(ServletContext context) {
	    this.context = context;
	  }

	  public void run() {
		 
	    if (!isRunning) {
	        isRunning = true;
	        OrderDao.delBatch();//定时执行的sql(删除订单的sql)
	        isRunning = false;
	    }
	    else {
	      context.log("OrderTask上一次任务执行还未结束");
	    }
	  } 
}

2.dao层定时执行的sql, HOUR( timediff( now(), createTime) )>1,timediff返回两个datetime值之间的差值,如果sql是当创建订单的时间与现在的时间相隔大于1小时的时候进行删除(修改状态)

//定时删除订单
	public static void delBatch() {
		update("update wxcms_order set status=-1 where status=0 and HOUR( timediff( now(), createTime) )>1 ",null,Order.class);
	}

3.启动定时器时调用

package net.wxcms.koubeichi.listener;

import java.util.List;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServlet;

import net.wxcms.koubeichi.bean.Wechat;
import net.wxcms.koubeichi.dao.WechatDao;

@WebListener
public class ContextListener extends HttpServlet implements ServletContextListener{

	private static final long serialVersionUID = 1L;
	public ContextListener() {
	} 
	private java.util.Timer timer = null;
	@Override
	public void contextInitialized(ServletContextEvent event) {
		timer = new java.util.Timer(true);
		event.getServletContext().log("定时器已启动");
		List<Wechat> list = WechatDao.list();
		for(Wechat w:list) {
			if(w.getAutoSend()==1) {
				timer.schedule(new OrderSendTask(event.getServletContext(),w), 0, 5*60*1000);//第三个参数表示每小时(即60*60*1000毫秒)被触发一次,中间参数0表示无延迟
			}
			if(w.getAutoEnd()==1) {
				timer.schedule(new OrderEndTask(event.getServletContext(),w), 0, 60*60*1000);
			}
		}
		//定时删除订单(每隔1小时执行一次)
		timer.schedule(new OrderDelTask(event.getServletContext()), 0, 60*60*1000);
	}
	@Override
	public void contextDestroyed(ServletContextEvent event) {
		timer.cancel();
		event.getServletContext().log("定时器销毁");
	} 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值