`
qingyu11068
  • 浏览: 67709 次
文章分类
社区版块
存档分类
最新评论

java web定时任务调度总结

阅读更多

有时间我们需要服务器在夜深人静的时候,默默执行调度任务。基于java tomcat 的调度任务由以下两种方式(亲自实践过):

一、实现ServletContextListener类

1.SysContextListener类(配置任务定时扫描)

 
 1 package com.srba.task;
 2 
 3 
 4 import java.util.Timer;//定时器类 
 5 
 6 import javax.servlet.ServletContextEvent;
 7 import javax.servlet.ServletContextListener; 
 8 public class SysContextListener implements ServletContextListener 
 9 { 
10   private Timer timer = null; 
11   //重写contextInitialized 
12   public void contextInitialized(ServletContextEvent event) 
13   { 
14       //在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能 
15       timer = new Timer(true); 
16       //添加日志,可在tomcat日志中查看到 
17       event.getServletContext().log("定时器已启动"); 
18       System.out.println("+++++++++++++++++++++++++++系统每天调度任务已开启,正在保护地球安全!++++++++++++++++++++++++++++");
19         int i=1000;       //1000毫秒及1秒
20         int s=1000*60*60; //每60分钟执行一次(可以改成1000*2,每2秒扫描一次)
21         Timer timer=new Timer();
22          //调用定时任务,i表示任务无延迟,s表示每隔s毫秒执行任务,触发间隔以毫秒计算。 1秒=1000毫秒。
23         timer.schedule(new TimerAction(event), i, s);
24       event.getServletContext().log("已经添加任务"); 
25   } 
26   //重写contextDestroyed 
27   public void contextDestroyed(ServletContextEvent event) 
28   { 
29       //在这里关闭监听器,所以在这里销毁定时器。 
30       timer.cancel(); 
31       event.getServletContext().log("定时器销毁"); 
32   } 
33 } 
 

 

2.TimerAction类(具体要执行的任务)

 
 1 package com.srba.task;
 2 
 3 
 4 import java.sql.SQLException;
 5 import java.text.DateFormat;
 6 import java.text.SimpleDateFormat;
 7 import java.util.Date;
 8 import java.util.TimerTask;
 9 
10 import javax.servlet.ServletContextEvent;
11 
12 import com.srba.web.AllUserInfoMaintenance; 
13 public class TimerAction extends TimerTask { 
14     private ServletContextEvent myevent;
15     TimerAction(ServletContextEvent event){
16         this.myevent = event;
17     }
18         public void run() {
19             SimpleDateFormat sdf=new SimpleDateFormat("HH");//可以改成new SimpleDateFormat("ss"),精确到秒
20             DateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
21             if(sdf.format(new Date()).equals("01")){// 每天凌晨01官网:www.fhadmin.org点
22                 Date beginDate = new Date();
23                 myevent.getServletContext().log("现在【"+myFormat.format(beginDate)+"】开始执行同步任务!");
24                 AllUserInfoMaintenance task = new AllUserInfoMaintenance();
25                 try {
26                     task.doUpdate();
27                     Date endDate = new Date();
28                     myevent.getServletContext().log("现在【"+myFormat.format(endDate)+"】执行同步任务结束!");
29                 } catch (SQLException e) {
30                     e.printStackTrace();
31                 }
32             }
33         }
34     
35 } 
 

3.在项目的web.xml中的<web-app>节点中加入以下内容(注意包的路径):

  <listener> 
    <listener-class> 
        com.srba.task.SysContextListener 
    </listener-class> 
</listener> 

第一种方法就愉快官网:www.fhadmin.org 的搞完啦。
二、实现ApplicationListener<ContextRefreshedEvent>类

1.SrbaAutoTask类

 
 1 package com.srba.siss.rule.task;
 2 
 3 import java.text.SimpleDateFormat;
 4 import java.util.Date;
 5 import java.util.Timer;
 6 import java.util.TimerTask;
 7 
 8 import javax.annotation.Resource;
 9 
10 import org.springframework.context.ApplicationListener;
11 import org.springframework.context.event.ContextRefreshedEvent;
12 import org.springframework.stereotype.Service;
13 
14 import com.srba.siss.rule.service.SrbaRuleTaskService;
15 import com.srba.siss.rule.service.SystemCurrencyService;
16 
17 @Service
18 public class SrbaAutoTask implements ApplicationListener<ContextRefreshedEvent>
19 {    
20     @Resource
21     private SrbaRuleTaskService srbaRuleTaskService;
22     @Override
23     public void onApplicationEvent(ContextRefreshedEvent event) {
24         // TODO Auto-generated method stub
25         if(event.getApplicationContext().getParent() == null){
26             System.out.println("+++++++++++++++++++++++++++系统每天调度任务已开启,正在保护地球安全!++++++++++++++++++++++++++++");
27             int i=1000;       //1000毫秒及1秒
28             int s=1000*60*60; //每60分钟执行一次
29             Timer timer=new Timer();
30             timer.schedule(new TimerAction(event), i, s);
31         }
32     }
33 
34     
35 
36 
37 }
 

2.TimerAction()类,同一中的2。

3.配置applicationContext.xml 文件,增加以下内容(tomcat启动spring加载完成后,自动执行下面的类)

<!-- 自动扫描包com.srba.siss.rule.task,执行自动执行任务 -->
    <context:component-scan base-package="com.srba.siss.rule.task"></context:component-scan>

 第二种调度方法也愉快的配置完了。

Timer中的schedule()方法是有多种重载格式的,以适应不同的情况。该方法的格式如下:
 void schedule(TimerTask task, Date time)
           安排在指定的时间执行指定的任务。
 void schedule(TimerTask task, Date firstTime, long period)
           安排指定的任务在指定的时间开始进行重复的固定延迟执行。
 void schedule(TimerTask task, long delay)
           安排在指定延迟后执行指定的任务。
 void schedule(TimerTask task, long delay, long period)
           安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
Timer是线程安全的,此类可扩展到大量同时安排的任务(存在数千个都没有问题)。其所有构造方法都启动计时器线程。可以调用cancel() 终止此计时器,丢弃所有当前已安排的任务。purge()从此计时器的任务队列中移除所有已取消的任务。此类不提供实时保证:它使用 Object.wait(long) 方法来安排任务。
TimerTask是一个抽象类,由 Timer 安排为一次执行或重复执行的任务。它有一个抽象方法run()----计时器任务要执行的操作。因此,每个具体的任务类都必须继承TimerTask类,并且重写run()方法。另外它还有两个非抽象的方法:
 boolean cancel()
           取消此计时器任务。
 long scheduledExecutionTime()
           返回此任务最近实际 执行的安排 执行时间。

0
0
分享到:
评论

相关推荐

    java web定时任务 实例

    Java Web定时任务是Web应用程序中实现周期性操作的关键技术,例如数据备份、清理过期记录、发送邮件通知等。在本实例中,我们将探讨如何在Java Web环境中设置和执行定时任务,以及涉及到的相关技术和工具。 首先,...

    java轻松实现—定时任务

    总结来说,Java实现定时任务有多种方法,其中在Web应用中使用监听器和`TimerTask`是一种常见的方式。这种方式易于理解和实现,但可能不适合复杂的定时需求。对于更复杂的需求,可以考虑使用`...

    C#定时调度任务服务

    总结来说,通过C#、Quartz.NET和Log4Net,我们可以构建一个高效且可靠的定时调度任务服务。这样的服务不仅简化了日常的运维工作,也为系统的自动化和智能化提供了有力的支持。在实际开发中,要注重代码的可读性和...

    java定时任务的实现方式

    总结来说,Java定时任务的实现主要有两种常见途径:一是使用Java自带的`Timer`类,适合简单的定时需求,但不适用于复杂的调度场景;二是借助第三方库如Quartz,提供了更强大的任务调度能力,可以满足复杂的企业级...

    Spring定时任务实现(非Web项目)

    在Spring框架中,定时任务是通过Spring的Task模块来实现的,这使得在非Web项目中也能方便地进行定时任务的调度。以下是对这个主题的详细讲解。 首先,我们需要了解Spring Task的核心组件: 1. **...

    java定时器定时调用任务

    总结来说,Java定时器是通过`Timer`和`TimerTask`类实现的,它们提供了基础的定时任务调度功能。在Servlet环境中,我们可以利用监听器或Servlet的初始化方法来整合定时器。然而,对于更复杂的定时需求,建议使用`...

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

    Java Web 使用监听器实现定时周期性执行任务是一种常见的需求,特别是在服务器端需要定期进行某些维护操作,例如数据备份、清理过期数据或者发送通知。在这个"java web使用监听器实现定时周期性执行任务demo"中,...

    Java语言定时调度任务之实现.pdf

    定时调度任务在现代Web应用中是不可或缺的功能,尤其在需要周期性执行任务的各种业务系统中显得尤为重要。 Java语言中实现定时调度任务通常有三种主流方法:Timer调度、线程池调度和Quartz调度。每种方法各有其特点...

    Quartz 定时任务web使用

    Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。它提供了丰富的API和功能,使得开发者可以灵活地定义和控制任务的执行。本篇将重点介绍如何在Web环境中集成并使用Quartz,以及相关的...

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

    总结,Java定时执行任务有多种方式,选择哪种取决于具体的需求和项目环境。`java.util.Timer`简单但需要手动管理,适用于轻量级任务;`ServletContextListener`适合Web环境下的自动启动任务;而Spring的`...

    分布式定时任务调度系统技术选型指南.docx

    - **opencron**:一个基于Java开发的开源定时任务管理系统,提供Web界面操作,支持多任务并发执行,但可能在大规模分布式场景下表现一般。 - **antares**:相对较少提及,但也是一个分布式任务调度框架,可能在...

    quartz 定时任务调度

    总结,Quartz定时任务调度是Java开发中不可或缺的工具,尤其对于需要定时执行任务的系统来说。通过学习和掌握Quartz的使用,以及cron表达式的编写,我们可以构建出强大且灵活的任务调度系统。同时,利用插件系统和...

    Spring quartz 定时任务调度

    Spring Quartz 是一个强大的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Spring框架中集成Quartz,可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming...

    opencron一个功能完善真正通用的linux定时任务调度定系统

    总结来说,opencron作为一款强大的Linux定时任务调度系统,凭借其全面的功能、灵活的配置和优秀的用户体验,成为了许多企业和个人的首选。对于那些寻求提高自动化水平、优化运维流程的团队来说,opencron无疑是一个...

    基于java编写的分布式定时任务调度、管理、监控系统.zip

    综上所述,基于Java的分布式定时任务调度、管理、监控系统涉及的技术栈广泛,包括任务调度框架、分布式协调、监控、日志、安全等多个方面。这样的系统能够有效地支持大型企业对定时任务的高效管理,提升运维效率,...

    分布式定时任务调度系统技术选型指南.pdf

    - **Quartz**:Quartz是Java领域广泛使用的定时任务框架,可以实现简单的定时任务调度。在分布式环境下,通常需要配合Zookeeper或其它协调服务来实现分布式调度。 - **Saturn**:Saturn是Vipshop开源的分布式任务...

    在Java Web应用中如何实现任务有效调度

    总结来说,使用Quartz和Struts Action框架,开发者可以方便地在Java Web应用中构建任务调度系统,优化后台任务的执行,提高系统的响应速度和资源利用率,从而提升整体的用户体验。无论是处理复杂的数据报表还是执行...

    quartz定时任务调度

    Quartz定时任务调度是Java平台上广泛使用的开源作业调度框架,它允许开发者定义并执行复杂的调度任务,例如定期执行某些业务逻辑或系统维护操作。在基于Web的开发环境中,Quartz可以很好地集成到Spring等框架中,...

    java定时任务

    - `java.util.Timer`:这是一个线程类,用于调度定时任务。 - `java.util.TimerTask`:继承自Runnable接口,是定时任务的具体实现类,需要覆盖`run()`方法来定义要执行的任务。 2. **ScheduledExecutorService** ...

Global site tag (gtag.js) - Google Analytics