本文共 1093 字,大约阅读时间需要 3 分钟。
启动Timer的容器类:
public class TMServlet extends HttpServlet {
/**
* @category 初始化方法,通过此方法配置定时启动属性,以及启动服务 */ public void init(ServletConfig context) throws ServletException { super.init(context); // 扫描周期,以毫秒计,为20分钟 //long scanPeriod = 1200000l; long scanPeriod = 60000l; try { // 启动服务 new Timer().schedule( new TMServiceTask(context.getServletContext()), 0, scanPeriod); } catch (RuntimeException e) { e.printStackTrace(); log.error(e); } }}
TimerTask的执行类:
public class TMServiceTask extends TimerTask {
private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd, HH:mm:ss");public TMServiceTask(ServletContext servletContext) {}
@Override
public void run() { System.out.println(sdf.format(new Date())); System.out.println("启动"); try {// 要做的操作
System.out.println("推数结束"); } catch (RuntimeException e) { throw e; } } }==========================
补充:weblogic下,使用console来启停服务时,可能导致前一个servlet没有完全停止的情况下启动了一个新的servlet,从而启动多个timer、运行多个定时任务的线程。如果没有实现做线程安全的控制,这种情况会导致严重的数据同步问题。
建议使用spring的schedule-job。至少目前来看没有定时任务不能关闭的问题。
本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/winters1224/798987,如需转载请自行联系原作者