利用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("定时器销毁");
}
}
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");
}
}
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>
<listener-class>com.ed.cnc.servletListener.StatisticsContextListener</listener-class>
</listener>
相关推荐
在Java中,我们可以利用`java.util.Timer`类和`java.util.TimerTask`类来实现简单的定时任务,但这种实现方式存在线程安全问题。在Web应用中,我们可以利用Servlet容器提供的特性来更优雅地处理定时任务,这就是描述...
### Java定时任务实现:每天定时执行任务 #### 一、概述 在Java开发中,定时任务是非常常见的一种需求。例如,需要定期清理数据库中的过期数据、定时发送邮件通知等场景。本文将详细介绍如何利用Java内置的`Timer`...
在Java Web应用中,为了使定时任务在服务器启动时自动运行,通常会将任务注入到一个Servlet容器初始化参数(如`ServletContextListener`)中。当Web应用加载时,监听器会启动任务。此外,Spring Boot提供了`@...
2. **定时任务实现**:在`contextInitialized`方法中,我们可以启动一个定时任务,例如使用Java的`ScheduledExecutorService`或者Spring的`@Scheduled`注解。`ScheduledExecutorService`是Java并发库的一部分,可以...
本文将详细介绍Java中三种常见的定时任务实现方式:`java.util.Timer`、`ServletContextListener`以及Spring框架中的`ScheduledTimerTask`。 1. **java.util.Timer** `java.util.Timer`类是最基础的定时任务工具,...
在本文中,我们将深入探讨如何在Spring 3.0框架中实现一个简单的定时任务Web工程。Spring是一个极其灵活且功能强大的Java应用框架,它不仅支持服务层、数据访问层的开发,还提供了对定时任务的强大支持。对于Web应用...
综上所述,根据具体应用场景和技术栈选择合适的定时任务实现方案至关重要。`java.util.Timer`适用于轻量级、简单的需求;`ServletContextListener`则为Web应用提供了与生命周期紧密结合的定时任务管理;而Spring框架...
在Java编程中,定时执行任务是一项常见的需求,例如在服务器...提供的文件`ReloadResourceListener.java`和`LoadResourceTimerTask.java`正是利用了这种机制,结合`web.xml`进行配置,以在Web应用启动时执行定时任务。
总之,`ServletContextListener`、`Timer`和`TimerTask`是Java Web开发中的关键工具,它们帮助开发者实现Web应用的生命周期管理和定时任务执行。了解并熟练掌握这些概念,对于提升应用的稳定性和效率有着重要的作用...
1. ServletContextListener:创建一个实现了ServletContextListener接口的类,重写contextInitialized方法,在Web应用启动时初始化定时任务。 2. Filter:利用Filter,可以在每次请求前或后执行定时任务,但这可能会...
通过上述内容,我们不仅了解了如何在Java中使用`java.util.Timer`和`java.util.TimerTask`来实现定时任务,而且还学习了如何在Web应用中利用这些工具来完成周期性的任务。这种方法特别适用于需要定期执行某些操作的...
Java提供了多种方式来实现定时任务,其中之一就是利用内置的`java.util.Timer`类。本文将详细介绍如何使用`Timer`类结合`ServletContextListener`接口来实现在Web应用中启动并管理一个定时任务。 #### 二、Java...
本文将介绍一种利用Servlet上下文监听器(ServletContextListener)和开源任务调度框架Quartz来实现后台任务启动的方法。 **原理** 在Java Web应用中,我们可以实现`ServletContextListener`接口来创建一个监听器...
Java提供了多种方式来实现定时任务,如Java的定时器(java.util.Timer)和Quartz库。这里我们将重点关注如何利用Servlet监听器(ServletContextListener)结合Java定时器来创建一个在Web应用启动时自动运行,并在...
将`Timer`和`TimerTask`整合到Spring框架中,可以利用Spring的AOP(面向切面编程)和DI(依赖注入)特性,使定时任务的管理更加灵活和方便。同时,通过在`web.xml`中配置监听器或者使用Spring的`@Scheduled`注解,...
总结,Java定时器在Web中的应用通过`java.util.Timer`和`ServletContextListener`可以实现Web应用启动时自动执行定时任务的功能。这在诸如数据清理、统计分析、系统监控等场景中非常有用。同时,通过结合Spring等...
通过以上步骤,你就可以在Web项目中利用Quartz和cron表达式实现定时任务了。注意,cron表达式的灵活性很高,可以创建复杂的定时规则,但同时也需要确保表达式的正确性,以免出现不必要的问题。在实际开发中,你可以...
为了实现这样的需求,可以利用`java.util.Timer`配合Servlet监听器(`ServletContextListener`)来实现定时任务的自动启动与执行。 ##### 3.2 使用步骤 1. **创建定时器**:在Web应用启动时创建一个`Timer`实例。 2...
在Java的Web应用开发中,有时我们需要在服务器启动时执行某些任务,比如数据初始化、定时任务等。本案例“timer随tomcat启动案例”就是针对这种情况的一个实例,它利用了Java的定时器(Timer)类和Tomcat的生命周期...
在本文中,我们将探讨如何在J2EE监控平台上设计和实现声音告警程序,这是一个用于监控定时任务、主机批处理运行、主机实时交易信息以及主机状态的综合性平台。平台的后台数据抓取部分由C语言实现,而前端展示、分析...