`

quartz定时任务使用

阅读更多

spring quartz(定时任务例子)
一.Quartz介绍
     Quartz是一个作业调度系统(a job scheduling system),负责在约定的时间到达时执行(或通知)其他软件控制。是一个Java的定时任务框架,使用它可以方便的实现计划任务,即在某个时间或每隔一定时间运行一个任务。Quartz的核心是Job/JobDetail,Trigger和Scheduler。

    1.Job/JobDetail
       Job/JobDetail=既要执行的任务,可以通过实现Job(interface)中的excute方法来指定任务的具体操作。 他描述了一个任务具体的信息,比如名称,组名等等。JobDetail对象是在Quartz的客户端(我们的程序)在Job被关联加入到Scheduler时创建的,JobDetail包含了Job的各种属性值和   JobDataMap,JobDataMap中存放了与之相关的Job类实例的状态信息。

    2.Trigger
       用于控制一组Job的触发,包裹SimmperTrigger和CronTrigger,后者支持一种描述触发事件和间隔的表达式语言。Quartz有个很好的想法就是分离了任务和任务执行的条件。Trigger就是控制任务执行条件的类,当Trigger认为执行条件满足的时刻,Trigger会通知相关的Job去执行。分离的好处是:
            1).你可以为某个Job关联多个Trigger,其中任何一个条件满足都可以触发job执行,这样可以完成一些组合的高级触发条件
            2).当Trigger失效后(比如:一个永远都不能满足的条件),你不必去声明一个新的job,代替的是你可以为job关联一个新的Trigger让job可以继续执行。
  
    3.Scheduler是控制和管理触发器的启动和终止。
       使用Scheduler前必须实例化Scheduler,需要由SchedulerFactory类来创建Scheduler,Factory的实例可以通过在JNDI存储中的Factory的序列化的方式获取,实例化Factory后直接使用该实例很容易。如下:
       public class WangyouQuartzListener extends QuartzInitializerListener {
            public  static  SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

            public WangyouQuartzListener() {
                       super();
            }

           public void contextInitialized(ServletContextEvent event) {
                    super.contextInitialized(event);
                    String factoryKey = event.getServletContext().getInitParameter("servlet-context-factory-key");
                     if (factoryKey == null) {
                               factoryKey = QUARTZ_FACTORY_KEY;
                      }
                      StdSchedulerFactory factory = (StdSchedulerFactory) event.getServletContext().getAttribute(factoryKey);

                   try {
                         QuartzScheduleHolder.getInstance().setScheduler(factory.getScheduler());
                       //per 2 hours add friends
                       Trigger trigger =  TriggerUtils.makeHourlyTrigger(24);
                       //Trigger trigger =  TriggerUtils.makeSecondlyTrigger(60);
                       trigger.setName(AddNewUserFriendJobDetail.JOB_NAME);
                      trigger.setStartTime(this.getBeforeAfterDate(1,-13));
                      QuartzScheduleHolder.getInstance().getScheduler().scheduleJob(new AddNewUserFriendJobDetail(),trigger);
                      //把job和Trigger关联,这样当Trigger认为应该触发的时候就会调用(实际上是Scheduler调用)job.execute方法了。

                      //per 3 day send mail and leave message
                      Trigger trigger2 =  TriggerUtils.makeHourlyTrigger(24*3);
                      trigger2.setStartTime(this.getBeforeAfterDate(1,-12));
                      trigger2.setName(LeaveMessageNewUserJobDetail.JOB_NAME);
                      QuartzScheduleHolder.getInstance().getScheduler().scheduleJob(new LeaveMessageNewUserJobDetail(),trigger2);

                       // per 6  recommend video
                      Trigger trigger3 =  TriggerUtils.makeHourlyTrigger(24*7);
                      trigger3.setName(RecommendVideoNewUserJobDetail.JOB_NAME);
                      trigger3.setStartTime(this.getBeforeAfterDate(2,-11));
                      QuartzScheduleHolder.getInstance().getScheduler().scheduleJob(new RecommendVideoNewUserJobDetail(),trigger3);

           
                         QuartzScheduleHolder.getInstance().getScheduler().start();
                   } catch (Exception e) {
                        e.printStackTrace();
                   }
              }

             public void contextDestroyed(ServletContextEvent event) {
                   super.contextDestroyed(event);
                     QuartzScheduleHolder.getInstance().setScheduler(null);
             }

              private Date getBeforeAfterDate( int day,int hour){
                       Calendar   cal   =   Calendar.getInstance();
                      cal.add(Calendar.DATE,day);
                     cal.add(Calendar.HOUR,hour);
                     return cal.getTime();
             }
           }
二。Spring Quartz
      Spring的scheduling。quartz包中对Quartz的框架进行封装,使得开发时不用写任何Quartz和Spring的代码就可以实现定时任务。Spring通过JobDetailBean,MethodInvokingJobDetailFactoryBean实现Job的定义,后者更加使用,只需指定要运行的类,和该类中运行的方法即可,Spring将自动生成符合Quartz要求的JobDetail。例如:
      1.jobDetail
         public class SayHelloJob {
   
                   private static  DateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                   private String message;

                   public String getMessage() {
                           return message;
                  }

                  public void setMessage(String message) {
                            this.message = message;
                 }

                 public void sayHello(){
                          Date date = new Date();
                         System.out.println(dateFormat.format(date)+" :"+this.getMessage() );
                 }
          }
       2.spring的配置文件:quartzbean.xml
           <?xml version="1.0" encoding="UTF-8"?>

           <beans xmlns="http://www.springframework.org/schema/beans"
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
                    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

                    <bean name="sayHelloJob" class="com.fg114.takeout.job.SayHelloJob">
                              <property name="message" value="start .............." />
                   </bean>

                   <bean name="sayHelloDetailBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
                              <property name="targetObject" ref="sayHelloJob" />
                             <property name="targetMethod" value="sayHello"/>
                    </bean>

                   <bean name="simpleTriggerBean" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
                                  <!--这里定义定时任务的对象的位置-->
                            <property name="jobDetail" ref="sayHelloDetailBean"/>
                           <!--这里定义每六秒钟程序执行一次-->
                             <property name=""></property>
                            <property name="repeatInterval" value="6000"/>
                           <!--这里定义程序启动两秒钟后开始执行-->
                         <property name="startDelay" value="2000"/>
                    </bean>
                 <! --          启动任务    -->
                   <bean name="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
                         <property name="triggers">
                             <list>
                                  <ref bean="simpleTriggerBean"/>
                            </list>
                       </property>
                  </bean>
             </beans>
3.web.xml :
            加入
           <listener>
             <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
           </listener>
       注意:common-collections.jar 版本布不能是2.1版本的

分享到:
评论

相关推荐

    quartz定时任务使用例子大全

    quartz定时任务使用例子大全,这里面介绍了三种使用quartz定时任务的方式,第一种方式是完全使用代码写死的调用方式,第二种使用的是从数据库读取任务配置信息的调用方式,第三种是使用从数据库读取任务配置,生成...

    C# 控制台Quartz定时任务.doc

    【Quartz定时任务】是Java领域的一个强大任务调度框架,但在C#中也有相应的实现,如标题所示,这里讨论的是C#控制台应用中使用Quartz.NET进行定时任务的实现。Quartz.NET允许开发者在应用程序中安排任务在特定时间...

    java quartz 定时任务

    在Java中,可以使用ScheduledExecutorService或者Quartz来实现定时任务。 3. **Cron表达式**: - Cron表达式是Unix cron服务的一种时间格式,用于定义任务的执行时间。它由7个子字段组成(秒、分钟、小时、日期、...

    Spring + quartz 定时任务修改定时时间不重启服务

    Spring + quartz 定时任务修改定时时间不重启服务

    Quartz定时任务表达式

    在探讨Quartz定时任务表达式的使用之前,我们先了解下Quartz是什么。Quartz是一个开源的作业调度框架,能够触发在指定时间运行的任务,广泛应用于Java应用程序中进行定时任务的管理。Quartz的核心是Cron表达式,它...

    Quartz 定时任务web使用

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

    Spring Quartz定时任务所需要的6个jar包

    Spring Quartz定时任务所需要的6个jar包,找到6个可是不容易哦。commons-collections.jar.zip+commons-logging.jar+jta.jar+log4j-1.2.14.jar.zip+quartz-all-1.6.0.jar+spring-2.0.6.jar

    Quartz定时任务常用的11张数据库脚本表结构

    这里我们将详细探讨Quartz定时任务在数据库中的11张核心表结构。 1. **QRTZ_JOB_DETAILS**:此表存储所有Job的详细信息,如Job类名、Job数据映射等。每个Job实例在此表中对应一条记录,Job的唯一标识由`SCHED_NAME`...

    Quartz定时任务框架

    总之,Quartz定时任务框架为Java开发者提供了一套灵活且功能强大的任务调度解决方案。通过理解其核心组件和API,我们可以方便地创建和管理各种定时任务,以满足各种业务需求。在这个简单的示例中,我们看到了如何每...

    C# Quartz.Net定时任务操作明细、完整过程

    本文将详细介绍如何使用Quartz.Net进行定时任务的配置与执行。 首先,**通过Nuget安装框架**非常简单,只需在Visual Studio中打开Nuget包管理器,搜索"Quartz.Net",然后安装指定版本,例如2.5.0。安装完成后,即可...

    Quartz定时任务简单列子

    这个"Quartz定时任务简单列子"可能是一个简单的教程或者示例项目,用于展示如何在Java应用中集成和使用Quartz来执行预定的任务。 Quartz的核心概念包括Job(工作)、Trigger(触发器)和Scheduler(调度器)。Job是...

    定时任务quartz实现分组串行并行动态配置

    Quartz是一款广泛使用的开源作业调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在实际应用中,我们可能需要根据业务需求动态地配置定时任务的执行方式,例如,某些任务可能需要串行执行,而其他任务则...

    quartZ定时任务.zip

    SpringBoot与Quartz的集成使得在微服务环境中实现定时任务变得非常便捷。下面将详细介绍如何利用Quartz在SpringBoot项目中创建、管理和停止定时任务,并根据业务需求配置cron表达式来设定执行周期。 1. **Quartz...

    C#Quartz定时任务

    【C# Quartz定时任务】是基于C#编程语言实现的一种定时任务框架,它允许开发者在.NET环境中创建和管理定时任务。这个项目是在Visual Studio 2010开发环境下编写的,提供了一个可以直接运行的示例(demo),方便快速...

    spring整合quartz定时任务调度

    Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...

    Quartz定时任务图形界面的系统

    Quartz定时任务图形界面系统是一种基于Java开发的高级任务调度平台,它允许开发者安排和管理应用程序中的各种任务执行。在本系统中,Quartz与其他流行的技术框架如SpringMVC、MyBatis、Thymeleaf和Bootstrap3进行了...

    spring3配置quartz定时任务

    总结,通过以上步骤,我们就成功地在Spring 3中配置了Quartz定时任务,实现了每10秒执行一次的任务。在实际应用中,你可以根据需求定义更复杂的作业和触发器,以及使用Quartz的其他高级特性,如集群支持、持久化作业...

Global site tag (gtag.js) - Google Analytics