`

利用ServletContextListener实现定时任务

阅读更多

利用ServletContextListener实现定时任务

 

一个实现ServletContextListener接口的类: StatisticsContextListener.java

 

package com.ed.cnc.servletListener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.ed.cnc.city.StatisticsTask;

/**
 * 统计ContextListener
 * 
@author westd
 *
 
*/

/**
 * 
@author westd
 *
 
*/

public class StatisticsContextListener implements ServletContextListener
{

    private java.util.Timer timer = null;
    
    
    /**
     * 这个方法在Web应用服务做好接受请求的时候被调用。
     * 
     * 
@see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
     
*/

    public void contextInitialized(ServletContextEvent event) 
    {
        timer = new java.util.Timer(true);
        event.getServletContext().log("定时器已启动"); 
        timer.schedule(new StatisticsTask(event.getServletContext()), 0, 60*60*1000);//每隔1小时
        event.getServletContext().log("已经添加任务调度表");
    }

    
    
    /**
     * 这个方法在Web应用服务被移除,没有能力再接受请求的时候被调用。
     * 
     * 
@see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
     
*/

    public void contextDestroyed(ServletContextEvent event)
    {
        timer.cancel();
        event.getServletContext().log("定时器销毁");
    }


}


一个继承于TimerTask的一个类:StatisticsTask.java

package com.ed.cnc.city;

import java.util.Calendar;
import java.util.TimerTask;

import javax.servlet.ServletContext;


/**
 * 统计任务
 * 
@author westd
 *
 
*/

public class StatisticsTask extends TimerTask
{

    private static final int STATISTICS_SCHEDULE_HOUR = 0;
    private static boolean isRunning = false;
    private ServletContext context = null;

    public StatisticsTask(ServletContext context)
    {
        this.context = context;
    }

    
    @Override
    public void run()
    {
        Calendar cal = Calendar.getInstance(); 
        //System.out.println(isRunning);
        if (!isRunning) 
        
            if (STATISTICS_SCHEDULE_HOUR == cal.get(Calendar.HOUR_OF_DAY)) //查看是否为凌晨
            
                isRunning = true
                context.log("开始执行指定任务");
                
                //TODO 添加自定义的详细任务
                executeTask();
                
                //指定任务执行结束
                isRunning = false;
                context.log("指定任务执行结束"); 
            }
 
        }
 
        else 
        {
            context.log("上一次任务执行还未结束");
        }

    
    }


    /**
     * 执行任务
     
*/

    public void executeTask()
    {
        System.out.println("任务1");
        System.out.println("任务2");
    }

}

web.xml中添加如下代码:

 

<listener>
        <listener-class>com.ed.cnc.servletListener.StatisticsContextListener</listener-class>
</listener>



分享到:
评论

相关推荐

    java轻松实现—定时任务

    在Java中,我们可以利用`java.util.Timer`类和`java.util.TimerTask`类来实现简单的定时任务,但这种实现方式存在线程安全问题。在Web应用中,我们可以利用Servlet容器提供的特性来更优雅地处理定时任务,这就是描述...

    java定时任务,每天定时执行任务

    ### Java定时任务实现:每天定时执行任务 #### 一、概述 在Java开发中,定时任务是非常常见的一种需求。例如,需要定期清理数据库中的过期数据、定时发送邮件通知等场景。本文将详细介绍如何利用Java内置的`Timer`...

    java web定时任务 实例

    在Java Web应用中,为了使定时任务在服务器启动时自动运行,通常会将任务注入到一个Servlet容器初始化参数(如`ServletContextListener`)中。当Web应用加载时,监听器会启动任务。此外,Spring Boot提供了`@...

    java web使用监听器实现定时周期性执行任务demo

    2. **定时任务实现**:在`contextInitialized`方法中,我们可以启动一个定时任务,例如使用Java的`ScheduledExecutorService`或者Spring的`@Scheduled`注解。`ScheduledExecutorService`是Java并发库的一部分,可以...

    Java定时执行任务的三种方法

    本文将详细介绍Java中三种常见的定时任务实现方式:`java.util.Timer`、`ServletContextListener`以及Spring框架中的`ScheduledTimerTask`。 1. **java.util.Timer** `java.util.Timer`类是最基础的定时任务工具,...

    Spring3.0定时任务简单实例web工程

    在本文中,我们将深入探讨如何在Spring 3.0框架中实现一个简单的定时任务Web工程。Spring是一个极其灵活且功能强大的Java应用框架,它不仅支持服务层、数据访问层的开发,还提供了对定时任务的强大支持。对于Web应用...

    jsp定时执行的三种方法

    综上所述,根据具体应用场景和技术栈选择合适的定时任务实现方案至关重要。`java.util.Timer`适用于轻量级、简单的需求;`ServletContextListener`则为Web应用提供了与生命周期紧密结合的定时任务管理;而Spring框架...

    JAVA定时执行

    在Java编程中,定时执行任务是一项常见的需求,例如在服务器...提供的文件`ReloadResourceListener.java`和`LoadResourceTimerTask.java`正是利用了这种机制,结合`web.xml`进行配置,以在Web应用启动时执行定时任务。

    ServletContextListener,Timer,TimerTask学习笔记

    总之,`ServletContextListener`、`Timer`和`TimerTask`是Java Web开发中的关键工具,它们帮助开发者实现Web应用的生命周期管理和定时任务执行。了解并熟练掌握这些概念,对于提升应用的稳定性和效率有着重要的作用...

    web定时器组件

    1. ServletContextListener:创建一个实现了ServletContextListener接口的类,重写contextInitialized方法,在Web应用启动时初始化定时任务。 2. Filter:利用Filter,可以在每次请求前或后执行定时任务,但这可能会...

    schedule

    通过上述内容,我们不仅了解了如何在Java中使用`java.util.Timer`和`java.util.TimerTask`来实现定时任务,而且还学习了如何在Web应用中利用这些工具来完成周期性的任务。这种方法特别适用于需要定期执行某些操作的...

    java定时器的实现

    Java提供了多种方式来实现定时任务,其中之一就是利用内置的`java.util.Timer`类。本文将详细介绍如何使用`Timer`类结合`ServletContextListener`接口来实现在Web应用中启动并管理一个定时任务。 #### 二、Java...

    如何在Web应用中去启动后台的任务

    本文将介绍一种利用Servlet上下文监听器(ServletContextListener)和开源任务调度框架Quartz来实现后台任务启动的方法。 **原理** 在Java Web应用中,我们可以实现`ServletContextListener`接口来创建一个监听器...

    JAVA自动执行任务[文].pdf

    Java提供了多种方式来实现定时任务,如Java的定时器(java.util.Timer)和Quartz库。这里我们将重点关注如何利用Servlet监听器(ServletContextListener)结合Java定时器来创建一个在Web应用启动时自动运行,并在...

    Timer定时器代码.zip

    将`Timer`和`TimerTask`整合到Spring框架中,可以利用Spring的AOP(面向切面编程)和DI(依赖注入)特性,使定时任务的管理更加灵活和方便。同时,通过在`web.xml`中配置监听器或者使用Spring的`@Scheduled`注解,...

    Java定时器在Web中的应用.doc

    总结,Java定时器在Web中的应用通过`java.util.Timer`和`ServletContextListener`可以实现Web应用启动时自动执行定时任务的功能。这在诸如数据清理、统计分析、系统监控等场景中非常有用。同时,通过结合Spring等...

    quartz通过cron实现web项目定时器

    通过以上步骤,你就可以在Web项目中利用Quartz和cron表达式实现定时任务了。注意,cron表达式的灵活性很高,可以创建复杂的定时规则,但同时也需要确保表达式的正确性,以免出现不必要的问题。在实际开发中,你可以...

    Java_Web定时器使用

    为了实现这样的需求,可以利用`java.util.Timer`配合Servlet监听器(`ServletContextListener`)来实现定时任务的自动启动与执行。 ##### 3.2 使用步骤 1. **创建定时器**:在Web应用启动时创建一个`Timer`实例。 2...

    timer随tomcat启动案例

    在Java的Web应用开发中,有时我们需要在服务器启动时执行某些任务,比如数据初始化、定时任务等。本案例“timer随tomcat启动案例”就是针对这种情况的一个实例,它利用了Java的定时器(Timer)类和Tomcat的生命周期...

    监控平台(J2EE)声音告警程序功能设计与实现

    在本文中,我们将探讨如何在J2EE监控平台上设计和实现声音告警程序,这是一个用于监控定时任务、主机批处理运行、主机实时交易信息以及主机状态的综合性平台。平台的后台数据抓取部分由C语言实现,而前端展示、分析...

Global site tag (gtag.js) - Google Analytics