`
zhengxuezhou
  • 浏览: 151337 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

采用开发框架quartz调度管理Job

    博客分类:
  • j2se
 
阅读更多
1.所需要的第三方包:
quartz-1.5.2.jar
commons-beanutils.jar
commons-digester-1.7.jar
commons-logging.jar
commons-logging-api.jar
log4j-1.2.11.jar
 
2.定义自己的job:
public class ScanJob implements Job {
 
 public  void SanJob(){}
 public void execute(JobExecutionContext arg0) throws JobExecutionException {
  Logger logger = null;
   logger = Logger.getLogger(this.getClass());               
   logger.info("test job is running");
        System.out.println("======================");
  System.out.println("this is my 11111111111111111 job");
        System.out.println("this is my 22222222222222222 job");
        Date abc=new Date();
       System.out.println("-------------"+ abc.getSeconds());
       
 }
 
 
}

 
3.在 web.xml加入:
<servlet>
   <servlet-name>QuartzInitializer</servlet-name>
   <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
   <init-param>
     <param-name>shutdown-on-unload</param-name>
     <param-value>true</param-value>
   </init-param>
   <init-param>
    <param-name>config-file</param-name>
    <param-value>quartz.properties</param-value>
   </init-param>
   <load-on-startup>2</load-on-startup>
 </servlet>
 
4.在classes的目录下建立quartz.properties
 #============================================================================
# Configure Main Scheduler Properties 
#============================================================================
org.quartz.scheduler.instanceName = QuartzScheduler
#============================================================================
# Configure ThreadPool 
#============================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 1000
#org.quartz.threadPool.threadPriority = 5
#============================================================================
# Configure Plugins
#============================================================================
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
#org.quartz.plugin.jobInitializer.fileName = quartz_jobs.xml
#org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
#org.quartz.plugin.jobInitializer.failOnFileNotFound = true

 
5.在classes的目录下建立quartz_jobs.xml
<?xml version='1.0' encoding='utf-8'?>
<quartz>
 <job>
   <job-detail>
    <name>test</name>
    <group>DEFAULT</group>
    <description>testJobhere</description>
    <job-class>www.ngc.com.ScanJob</job-class>
   </job-detail>
   <trigger>
             <cron>
                  <name>testTrigger</name>
                  <group>DEFAULT</group>
                  <job-name>test</job-name>
                 <job-group>DEFALUT</job-group>
                 <cron-expression>0/5 * * * * ?</cron-expression>
             </cron>
       </trigger>
  </job>
</quartz>
 

6.用main方法测试:
public class QuartzMain {
 public static void main(String[] args) {
  QuartzMain server = new QuartzMain();
   try {
  server.startScheduler();
 } catch (SchedulerException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
  }
 protected void startScheduler() throws SchedulerException {
  Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
     JobDetail jobDetail =
      new JobDetail("testJob", Scheduler.DEFAULT_GROUP, ScanJob.class);
      //结束时间    
     long end = System.currentTimeMillis() + 9000L;
    //执行10次,每3秒执行一次,到9秒后结束
     SimpleTrigger trigger = new SimpleTrigger("test",null,new Date(),new Date(end),10,3000L);
      scheduler.scheduleJob(jobDetail, trigger);
     scheduler.start();
  }
}
 
 
7.在应用服务器中发布,就可以在console看到
======================
this is my 11111111111111111 job
this is my 22222222222222222 job
-------------35
 
日志.

Quartz是一个开源的作业调度框架,它完全由java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵活性而不牺牲简单性。你能够 用它来 为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron- like表达式等等。

本文内容
1.         Quartz让任务调度简单
2.         Quartz的发展史
3.         上手Quartz
4.         Quartz内部架构
5.         作业
6.         作业管理和存储
7.         有效作业存储
8.         作业和触发器
9.         调度一个作业
10.         用调度器(Scheduler)调用你的作业
11.         编程调度同声明性调度
12.         有状态和无状态作业
13.         Quartz框架的其他特征
14.         Quartz下一步计划
15.         了解更多Quartz特征


你 曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行。一个自动执行而无须干预的任务在执行过程中如果发 生一个严重错误,应用能够知到其执行失败并尝试重新执行吗?你和你的团队是用java编程吗?如果这些问题中任何一个你回答是,那么你应该使用 Quartz调度器。

旁注:Matrix目前就大量使用到了Quartz。比如,排名统计功能的实现,在Jmatrix里通过Quartz定义了一个定时调度作业,在每天凌晨一点,作业开始工作,重新统计大家的Karma和排名等。
还有,RSS文件的生成,也是通过Quartz定义作业,每隔半个小时生成一次RSS XML文件。
所以Quartz使用的地方很多,本文无疑是一篇很好的入门和进阶的文章,在此,感谢David w Johnson的努力!


Quartz让作业调度简单

Quartz 是一个完全由java编写的开源作业调度框架。不要让作业调度这个术语吓着你。尽管Quartz框架整合了许多额外功能, 但就其简易形式看,你会发现它易用得简直让人受不了!。简单地创建一个实现org.quartz.Job接口的java类。Job接口包含唯一的方法:

public void execute(JobExecutionContext context) 
      throws JobExecutionException;


在 你的Job接口实现类里面,添加一些逻辑到execute()方法。一旦你配置好Job实现类并设定好调度时间表,Quartz将密切注意剩余时间。当调 度程序确定该是通知你的作业的时候,Quartz框架将调用你Job实现类(作业类)上的execute()方法并允许做它该做的事情。无需报告任何东西 给调度器或调用任何特定的东西。仅仅执行任务和结束任务即可。如果配置你的作业在随后再次被调用,Quartz框架将在恰当的时间再次调用它。

如 果你使用了其它流行的开源框架象struts,你会对Quartz的设计和部件感到舒适。虽然两个开源工程是解决完全不同的问题,还是有很多相似的之处, 就是开源软件用户每天感觉很舒适。Quartz能用在单机J2SE应用中,作为一个RMI服务器,也可以用在web应用中,甚至也可以用在J2EE应用服 务器中。

Quartz的发展史

尽 管Quartz今年开始受到人们注意,但还是暂时流行。Quartz由James House创建并最初于2001年春天被加入sourceforge工程。接下来的几年里,有许多新特征和版本出现,但是直到项目迁移到新的站点并成为 OpenSymphony项目家族的一员,才开始真正启动并受到应有的关注。
James House仍然和几个协助他的业余开发者参与大量开发工作。Quartz开发团队今年能发布几个新版本,包括当前正处在候选发布阶段的1.5版。

上手Quartz
Quartz工程驻留在OpenSymphony站点上。在Quartz站点上可以找到许多有用的资源:JavaDocs,包含指南的文档,CVS访问,用户和开发者论坛的连接,当然也有下载。
从 下载连接取得Quartz的发布版本,并且解压到到本地目录。这个下载文件包含了一个预先构建好的Quartz二进制文件(quartz.jar),你可 以将它放进自己的应用中。Quartz框架只需要少数的第三方库,并且这些三方库是必需的,你很可能已经在使用这些库了。

你要把 Quartz的安装目录的<quartz- install>/lib/core 和 <quartz-install>/lib/optional目录中的第三方库加进你自己的工程中。大多数第三方库是我们所熟知和喜欢的标准 Jakarta Commons库,像Commons Logging, Commons BeantUtils等等。
    
quartz.properties文件
Quartz 有一个叫做quartz.properties的配置文件,它允许你修改框架运行时环境。缺省是使用Quartz.jar里面的 quartz.properties文件。当然,你应该创建一个quartz.properties文件的副本并且把它放入你工程的classes目录中 以便类装载器找到它。quartz.properties样本文件如例1所示。

例1.quartz.properties文件允许修改Quartz运行环境:

#===============================================================
# Configure Main Scheduler Properties  
#===============================================================

org.quartz.scheduler.instanceName = QuartzScheduler
org.quartz.scheduler.instanceId = AUTO

#===============================================================
# Configure ThreadPool  
#===============================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount =   5
org.quartz.threadPool.threadPriority = 5

#===============================================================
# Configure JobStore  
#===============================================================

org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore


一旦将Quartz.jar文件和第三方库加到自己的工程里面并且quartz.properties文件在工程的classes目录中,就可以创建作业了。然而,在做这之前,我们暂且回避一下先简短讨论一下Quartz架构。

Quartz内部架构
在 规模方面,Quartz跟大多数开源框架类似。大约有300个java类和接口,并被组织到12个包中。这可以和Apache Struts把大约325个类和接口以及组织到11个包中相比。尽管规模几乎不会用来作为衡量框架质量的一个特性,但这里的关键是quarts内含很多功 能,这些功能和特性集是否成为、或者应该成为评判一个开源或非开源框架质量的因素。

Quartz调度器
Quartz 框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。Quartz不仅仅 是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作 业。这就是Quartz怎样能并发运行多个作业的原理。Quartz依赖一套松耦合的线程池管理部件来管理线程环境。本片文障中,我们会多次提到线程池管 理,但Quartz里面的每个对象是可配置的或者是可定制的。所以,例如,如果你想要插进自己线程池管理设施,我猜你一定能!

作业
用Quartz 的行话讲,作业是一个执行任务的简单java类。任务可以是任何java代码。只需你实现org.quartz.Job接口并且在出现严重错误情况下抛出 JobExecutionException异常即可。Job接口包含唯一的一个方法execute(),作业从这里开始执行。一旦实现了Job接口和 execute()方法,当Quartz确定该是作业运行的时候,它将调用你的作业。Execute()方法内就完全是你要做的事情。下面有一些你要在作 业里面做事情的例子:
·         用JavaMail(或者用其他的像Commons Net一样的邮件框架)发送邮件
·         创建远程接口并且调用在EJB上的方法
·         获取Hibernate Session,查询和更新关系数据库里的数据
·         使用OSWorkflow并且从作业调用一个工作流
·         使用FTP和到处移动文件
·         调用Ant构建脚本开始预定构建

这种可能性是无穷的,正事这种无限可能性使得框架功能如此强大。Quartz给你提供了一个机制来建立具有不同粒度的、可重复的调度表,于是,你只需创建一个java类,这个类被调用而执行任务。

作业管理和存储
作 业一旦被调度,调度器需要记住并且跟踪作业和它们的执行次数。如果你的作业是30分钟后或每30秒调用,这不是很有用。事实上,作业执行需要非常准确和即 时调用在被调度作业上的execute()方法。Quartz通过一个称之为作业存储(JobStore)的概念来做作业存储和管理。


有效作业存储

Quartz 提供两种基本作业存储类型。第一种类型叫做RAMJobStore,它利用通常的内存来持久化调度程序信息。这种作业存储类型最容易配置、构造和运行。对 许多应用来说,这种作业存储已经足够了。然而,因为调度程序信息是存储在被分配给JVM的内存里面,所以,当应用程序停止运行时,所有调度信息将被丢失。 如果你需要在重新启动之间持久化调度信息,则将需要第二种类型的作业存储。

第二种类型的作业存储实际上提供两种不同的实现,但两种实现一 般都称为JDBC作业存储。两种JDBC作业存储都需要JDBC驱动程序和后台数据库来持久化调度程序信息。这两种类型的不同在于你是否想要控制数据库事 务或这释放控制给应用服务器例如BEA's WebLogic或Jboss。(这类似于J2EE领域中,Bean管理的事务和和容器管理事务之间的区别)
这两种JDBC作业存储是:

·         JobStoreTX:当你想要控制事务或工作在非应用服务器环境中是使用
·         JobStoreCMT:当你工作在应用服务器环境中和想要容器控制事务时使用。

JDBC作业存储为需要调度程序维护调度信息的用户而设计。

作业和触发器

Quartz 设计者做了一个设计选择来从调度分离开作业。Quartz中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型,但两个最常用的是 SimpleTrigger和CronTrigger。SimpleTrigger为需要简单打火调度而设计。典型地,如果你需要在给定的时间和重复次数 或者两次打火之间等待的秒数打火一个作业,那么SimpleTrigger适合你。另一方面,如果你有许多复杂的作业调度,那么或许需要 CronTrigger。

CronTrigger是基于Calendar-like调度的。当你需要在除星期六和星期天外的每天上午10点半执行作业时,那么应该使用CronTrigger。正如它的名字所暗示的那样,CronTrigger是基于Unix克隆表达式的。

作为一个例子,下面的Quartz克隆表达式将在星期一到星期五的每天上午10点15分执行一个作业。
0 15 10 ? * MON-FRI

下面的表达式
0 15 10 ? * 6L 2002-2005
将在2002年到2005年的每个月的最后一个星期五上午10点15分执行作业。

你不可能用SimpleTrigger来做这些事情。你可以用两者之中的任何一个,但哪个跟合适则取决于你的调度需要。


调度一个作业

让 我们通过看一个例子来进入实际讨论。现假定你管理一个部门,无论何时候客户在它的FTP服务器上存储一个文件,都得用电子邮件通知它。我们的作业将用 FTP登陆到远程服务器并下载所有找到的文件。然后,它将发送一封含有找到和下载的文件数量的电子邮件。这个作业很容易就帮助人们整天从手工执行这个任务 中解脱出来,甚至连晚上都无须考虑。我们可以设置作业循环不断地每60秒检查一次,而且工作在7×24模式下。这就是Quartz框架完全的用途。

首先创建一个Job类,将执行FTP和Email逻辑。下例展示了Quartz的Job类,它实现了org.quartz.Job接口。

例2.从FTP站点下载文件和发送email的Quartz作业

public class ScanFTPSiteJob implements Job {
     private static Log logger = LogFactory.getLog(ScanFTPSiteJob.class);

     /*
      * Called the scheduler framework at the right time
      */
     public void execute(JobExecutionContext context)
             throws JobExecutionException {

         JobDataMap jobDataMap = context.getJobDataMap();

         try {
             // Check the ftp site for files
             File[] files = JobUtil.checkForFiles(jobDataMap);

             JobUtil.sendEmail(jobDataMap, files);
         } catch (Exception ex) {
             throw new JobExecutionException(ex.getMessage());
         }
     }
}


我 们故意让ScanFTPSiteJob保持很简单。我们为这个例子创建了一个叫做JobUtil的实用类。它不是Quartz的组成部分,但对构建各种作 业能重用的实用程序库来说是有意义的。我们可以轻易将那种代码组织进作业类中,quarts 调度器一样好用,因为我们一直在使用quarts,所以那些代码可继续重用。

JobUtil.checkForFiles() and JobUtil.sendEmail()方法使用的参数是Quartz创建的JobDataMap的实例。实例为每个作业的执行而创建,它是向作业类传递配置参数的方法。
这里并没有展示JobUtil的实现,但我们能用Jakarta上的Commons Net轻易地实现FTP和Email功能。

用调度器调用作业

首先创建一个作业,但为使作业能被调度器调用,你得向调度程序说明你的作业的调用时间和频率。这个事情由与作业相关的触发器来完成。因为我们仅仅对大约每60秒循环调用作业感兴趣,所以打算使用SimpleTrigger。

作业和触发器通过Quartz调度器接口而被调度。我们需要从调度器工厂类取得一个调度器的实例。最容易的办法是调用StdSchedulerFactory这个类上的静态方法getDefaultScheduler()。
使用Quartz框架,你需要调用start()方法来启动调度器。例3的代码遵循了大多数Quartz应用的一般模式:创建一个或多个作业,创建和设置触发器,用调度器调度作业和触发器,启动调度器。

例3.Quartz作业通过Quartz调度器而被调度

public class MyQuartzServer {

     public static void main(String[] args) {
         MyQuartzServer server = new MyQuartzServer();

         try {
             server.startScheduler();
         } catch (SchedulerException ex) {
             ex.printStackTrace();
         }
     }

     protected void startScheduler() throws SchedulerException {

         // Use the factory to create a Scheduler instance
         Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

         // JobDetail holds the definition for Jobs
         JobDetail jobDetail = 
new JobDetail("ScanFTPJob", Scheduler.DEFAULT_GROUP,
                 ScanFTPSiteJob.class);

// Store job parameters to be used within execute()
jobDetail.getJobDataMap().put(
"FTP_HOST", 
"//home//cavaness//inbound");

         // Other neccessary Job parameters here

         // Create a Trigger that fires every 60 seconds
         Trigger trigger = TriggerUtils.makeSecondlyTrigger(60);
        
         // Setup the Job and Trigger with the Scheduler
         scheduler.scheduleJob(jobDetail, trigger );
        
         // Start the Scheduler running
         scheduler.start();
     }
}



编程调度同声明性调度

例3中,我们通过编程的方法调度我们的ScanFTPSiteJob作业。就是说,我们用java代码来设置作业和触发器。Quartz框架也支持在xml文件里面申明性的设置作业调度。申明性方法允许我们更快速地修改哪个作业什么时候被执行。

Quartz 框架有一个插件,这个插件负责读取xml配置文件。xml配置文件包含了关于启动Quartz应用的作业和触发器信息。所有xml文件中的作业连同相关的 触发器都被加进调度器。你仍然需要编写作业类,但配置那些作业类的调度器则非常动态化。例4展示了一个用申明性方式执行与例3代码相同的逻辑的xml配置 文件。

例4.能使用xml文件调度的作业

 

    
        
            ScanFTPSiteJob
            DEFAULT
            
                 A job that scans an ftp site for files
            
            ScanFTPSiteJob

            
                
                    FTP_HOST
                    /home/cavaness/inbound
                
                
                

            
        

        
            
                ScanFTPSiteJobTrigger
                DEFAULT
                ScanFTPSiteJob
                DEFAULT
                2005-09-11 6:10:00 PM
                
                -1
                60000
            
        

    


你可以将xml文件中的元素跟例3代码作个比较,它们从概念上来看是相同的。使用例4式的申明性方法的好处是维护变得极其简单,只需改变xml配置文件和重新启动Quartz应用即可。无须修改代码,无须重新编译,无须重新部署。

有状态和无状态作业

在本文中你所看到的作业到是无状态的。这意味着在两次作业执行之间,不会去维护作业执行时JobDataMap的状态改变。如果你需要能增、删,改JobDataMap的值,而且能让作业在下次执行时能看到这个状态改变,则需要用Quartz有状态作业。
如 果你是一个有经验的EJB开发者的话,深信你会立即退缩,因为有状态带有负面含义。这主要是由于EJB带来的伸缩性问题。Quartz有状态作业实现了 org.quartz.StatefulJob接口。无状态和有状态作业的关键不同是有状态作业在每次执行时只有一个实例。大多数情况下,有状态的作业不 回带来大的问题。然而,如果你有一个需要频繁执行的作业或者需要很长时间才能完成的作业,那么有状态作业可能给你带来伸缩性问题。

Quartz框架的其他特征

Quartz框架有一个丰富的特征集。事实上,quarts有太多特性以致不能在一种情况中全部领会,下面列出了一些有意思的特征,但没时间在此详细讨论。

监听器和插件

每 个人都喜欢监听和插件。今天,几乎下载任何开源框架,你必定会发现支持这两个概念。监听是你创建的java类,当关键事件发生时会收到框架的回调。例如, 当一个作业被调度、没有调度或触发器终止和不再打火时,这些都可以通过设置来来通知你的监听器。Quartz框架包含了调度器监听、作业和触发器监听。你 可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听。

一旦你的一个具体监听被调用,你就能使用这个技术来做一些你想要在 监听类里面做的事情。例如,你如果想要在每次作业完成时发送一个电子邮件,你可以将这个逻辑写进作业里面,也可以JobListener里面。写进 JobListener的方式强制使用松耦合有利于设计上做到更好。

Quartz插件是一个新的功能特性,无须修改Quartz源码便可 被创建和添加进Quartz框架。他为想要扩展Quartz框架又没有时间提交改变给Quartz开发团队和等待新版本的开发人员而设计。如果你熟悉 Struts插件的话,那么完全可以理解Quartz插件的使用。

与其Quartz提供一个不能满足你需要的有限扩展点,还不如通过使用插件来拥有可修整的扩展点。

集群Quartz应用
Quartz应用能被集群,是水平集群还是垂直集群取决于你自己的需要。集群提供以下好处:
·         伸缩性
·         搞可用性
·         负载均衡
目前,Quartz只能借助关系数据库和JDBC作业存储支持集群。将来的版本这个制约将消失并且用RAMJobStore集群将是可能的而且将不需要数据库的支持。

 

 

QUATRZ --XML配置时间调度

第一步:修改XML文件,内容如下:

<servlet>
    <display-name>Quartz Initializer Servlet</display-name>
    <servlet-name>QuartzInitializer</servlet-name>
    <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class>
    <init-param>
      <param-name>config-file</param-name>
      <param-value>/quartz.properties</param-value> /*注意,这里是配置QUARTZ的基本参数*/
    </init-param>
    <init-param>
      <param-name>shutdown-on-unload</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

第二步:配置quartz.properties,将这个资源文件放到CLASSPATH下,内容如下:

org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = one

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 2
org.quartz.threadPool.threadPriority = 4

org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTrigger
HistoryPlugin
org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {
6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}
org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} complete
d firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger in
struction code: {9}

org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializatio
nPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml /*这个是配置任务调度的时间*/
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHoo
kPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true

第三步:添加quartz_job.xml,将这个文件也放到CLASSPATH下,内容如下:

<?xml version="1.0" encoding="gb2312"?>
<quartz>
<job>
    <job-detail>
      <name>jobTest</name>
      <group>group1</group>
      <job-class>com.duiduihu.ecf.common.quartz.JobEcecute</job-class> /*任务调度类*/
    </job-detail>
    <trigger>
      <cron>
        <name>trigerTest</name>
        <group>group1</group>
        <job-name>jobTest</job-name>
        <job-group>group1</job-group>
       
        <!--每天晚上9点执行-->
        <cron-expression>0 0 21 * * ?</cron-expression> /*这个是类似于LINUX的语法的cron-expression,具体在下面详细说明*/
      </cron>
    </trigger>
</job>
</quartz>

第四步 创建被调度任务类 内容如下:

package test.quartz;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;

public class JobEcecute implements Job {
    public void execute(JobExecutionContext context) throws
            JobExecutionException {
        System.out.println("任务调度成功! - " + new Date());
    }
}
启动工程,进行测试. 
分享到:
评论

相关推荐

    任务调度开源框架Quartz

    通过阅读《任务调度框架Quartz.doc》文档,你将能够深入理解Quartz的内部机制,学习如何创建和配置作业与触发器,以及如何在实际项目中集成和使用Quartz。文档可能还会涵盖Quartz的源码分析,这对于想要定制或优化...

    quartz调度系统工具.zip

    这个"quartz调度系统工具.zip"文件很可能包含了用于简化Quartz配置和管理的实用工具。 Quartz的核心概念包括: 1. **作业(Jobs)**:是实际执行的工作单元,开发者需要自定义Job类来实现特定的任务逻辑。 2. **...

    Java任务调度框架Quartz教程实例

    ### Java任务调度框架Quartz教程实例 #### 一、Quartz框架简介 Quartz是一个功能齐全、开源的任务调度服务框架,它可以被集成到几乎所有类型的Java应用程序中,无论是小型的独立应用还是大型的企业级系统,甚至是...

    任务调度框架Quartz

    1.高度灵活性:Quartz 允许开发人员灵活地定义触发器的调度时间表,可以对触发器和任务进行关联映射。 2.持久化机制:Quartz 提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统因故障关闭,任务...

    Quartz作业调度框架

    Quartz调度器是Quartz框架的核心组件之一。用户可以通过QuartzSchedulerFactory创建调度器,并且管理调度器的运行状态。Quartz还提供了一种机制来管理Job实例,以及如何处理Job的易失性、持久性和可恢复性。Java线程...

    quartz3种调度形式+传参.zip

    1. 单纯的Quartz调度 在不依赖任何框架的情况下,直接使用Quartz API进行任务调度。首先,你需要创建一个Job类,实现`org.quartz.Job`接口,并重写`execute(JobExecutionContext context)`方法。然后,定义Trigger...

    quartz定时调度完整实例

    Quartz是一款开源的作业调度框架,它为Java应用程序提供了强大的定时任务管理能力。在这个"quartz定时调度完整实例"中,我们将深入理解Quartz的工作原理和如何在项目中实际应用。 1. **Quartz简介** - Quartz是...

    Quartz - 作业调度框架

    最后,将Job与Trigger关联并交给Scheduler(调度器)管理,由Scheduler负责在指定时间执行Job。 在单元测试Quartz时,我们可以利用JUnit来验证Job的正确性和Trigger的配置是否准确。通常,这涉及到模拟Scheduler的...

    Java任务调度框架Quartz1.8.6教程实例源代码

    Java任务调度框架Quartz是Java开发中用于自动化任务执行的重要工具,特别适用于企业级应用和服务。Quartz 1.8.6是该框架的一个稳定版本,提供了强大的定时任务管理和执行能力。下面我们将深入探讨Quartz的基本概念、...

    quartz任务调度框架简单实用小demo

    Quartz是一个开源的作业调度框架,它为Java应用程序提供了强大的定时和计划功能。在Java项目中,Quartz常被用来执行周期性的任务,比如数据备份、日志清理、定时发送邮件等。本“quartz任务调度框架简单实用小demo”...

    Spring集成Quartz调度框架.pdf

    - **调度器**(Scheduler):Quartz调度框架的核心组件,负责管理和调度触发器和作业。 - **触发器**(Trigger):定义作业何时何地执行的规则。 - **作业**(Job):具体要执行的任务或业务逻辑。 #### 四、Spring...

    Quartz调度、终止执行的任务

    Quartz是一款开源的作业调度框架,它允许开发者创建和安排任务执行。在Java应用程序中,Quartz能够帮助我们在特定的时间点或按照预设的周期执行某些功能,如数据收集、日志清理等。当我们需要终止某个正在运行的任务...

    分布式调度框架quartz从入门到精通

    分布式调度框架Quartz是OpenSymphony开源组织推出的一款强大的任务调度工具,专为Java平台设计。Quartz可以方便地与其他J2EE或J2SE应用结合,也可以单独使用。它支持创建复杂的工作流,能够处理从简单到成千上万个...

    Java任务调度框架Quartz2.0.2教程实例源代码

    Java任务调度框架Quartz2.0.2是一个强大的开源任务调度库,被广泛应用于各种Java应用程序中,包括Web应用和企业级系统。Quartz允许开发者安排任务以在特定时间执行,提供灵活的时间触发器和可插拔的Job执行策略。在...

    学习笔记_Quartz作业调度框架,使用corn表达式

    Quartz作业调度框架是Java开发中的一个强大工具,用于实现定时任务和工作流管理。它以其灵活性、可扩展性和稳定性而被广泛应用。本学习笔记主要围绕Quartz的使用,特别是如何利用corn表达式来设置定时任务。 Quartz...

    基于Quartz.Net 的任务调度计划框架

    Quartz.Net是一个强大的开源任务调度框架,用于在.NET环境中创建和执行定时任务。它提供了灵活的调度机制,允许开发者在应用程序中定义复杂的作业执行规则,从而实现自动化的工作流程。Quartz.NET不仅支持简单的定时...

    quartz开源作业调度框架

    ### quartz开源作业调度框架知识点详解 #### 一、Quartz框架简介 Quartz是一个功能强大的、开源的作业调度框架,完全由Java编写而成。它能够被应用在服务器端的Java应用程序中,帮助开发者轻松地创建并管理定时任务...

    Quartz任务调度管理

    ### Quartz任务调度管理 #### 一、任务调度基础概念 任务调度是指系统按照预先设定的时间规则来自动执行特定任务的功能。这种机制广泛应用于各种场景,例如数据备份、定期检查资源状态、发送邮件通知等。 ##### ...

    Spring Quartz 调度器

    总结来说,Spring Quartz调度器是企业级应用中实现定时任务的重要工具,通过Spring的管理和Quartz的调度能力,可以方便地创建、调整和监控定时任务,提升系统的自动化程度。通过以上步骤,你可以快速掌握Spring集成...

    Quartz一个开源作业调度框架

    Quartz 是一个强大的开源作业调度框架,主要用于自动化执行任务,如定时发送邮件、执行数据清理、执行批处理等。该框架完全用 Java 编写,兼容 J2SE 和 J2EE 环境,提供了丰富的功能和灵活性,使得开发者能够方便地...

Global site tag (gtag.js) - Google Analytics