【Quartz】——入门篇

来源:互联网 发布:软件评测师真题在线 编辑:程序博客网 时间:2024/06/04 01:38

  Quartz的jar


  Quartz包里包含一系列的jar包,位于根目录中。Quartz主库叫quartz-all-***.jar(***是版本名)。为了充

分使用Quartz的所有特性,jar包必须位于所在的应用的classpath下。

  下载Quartz,解压之后,将quartz-all-***.jar保存到本地。

  我主要在应用服务环境下使用Quartz,所以我更喜欢将Quartz jar包放到我的企业级应用程序里(.ear或

者.war)。如果你想在其他任何应用程序里使用Quartz,只需确认将它放到应用程序的classpath下即可。如果

是一个独立的应用程序,将Quartz与其他的应用程序依赖的jar包放在classpath下。

  Quartz依赖大量的第三方库,这些库包含在“lib”路径下的zip文件中。为了充分利用Quartz,所有的jar

必须放到classpath下。如果你建立一个独立的应用程序,建议你将所有jar都添加到classpath。如果你在应

用服务器环境下使用了Quartz,classpath已经有必要的部分jar了,你可以选择性的挑选一些你需要的jar文

件。

  In an appserver environment, beware of strange results when accidentally including two different versions of the same jar. For example, WebLogic includes an implementation of J2EE (inside weblogic.jar) which may differ to the one in servlet.jar. In this case, it's usually better to leave servlet.jar out of your application, so you know which classes are being utilized.


  Properties文件


  Quartz的资源文件quartz.properties。首先声明这不是必须的,但是使用任何最基本的配置的时候,它必须位于

classpath下。

  另外,“举个栗子”。我的应用程序是在WebLogic Workshop下开发的。我将应用中的所有配置文件都放在根目录

下。当我将程序打包到.ear文件中,配置项将会被打包进.ear文件的一个jar包。quartz.properties也自动的放到了

classpath下。

  如果你新建一个包含Quartz的Web应用程序,为了处于classpath下,你最好将quartz.properties文件放到WEB-

INF/classes文件夹下。


  Configuration配置


  这点很重要!Quartz是一个可配置的应用程序,最好的配置方式就是编辑quartz.properties文件,并将它放到

classpath路径下。

  Quartz的可用资源文件链接地址:Quartz Configuration Reference.

  为了快速建立和运行,一个最基本的quartz.properties:

org.quartz.scheduler.instanceName = MySchedulerorg.quartz.threadPool.threadCount = 3org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

  通过下面特点的配置来建立任务:

  ·org.quartz.scheduler.instanceName—任务名称:“MyScheduler”

  ·org.quartz.threadPool.threadCount—在线程池中有3个线程,意味着最多有3个任务同时运行

  ·org.quartz.jboStore.class—Quartz的所有数据,如任务的细节和触发器,都被保存在内存中。即使你想将

Quartz数据保存到数据库中,我还是建议你使用RamJobStore。


  开启一个简单的应用


  一切准备工作就绪,下边的代码包含scheduler实例,开始实践吧!


  QuartzTest.java:

package com.taotao.quartz;import org.quartz.*;import org.quartz.impl.StdSchedulerFactory;import static org.quartz.JobBuilder.newJob;import static org.quartz.SimpleScheduleBuilder.simpleSchedule;import static org.quartz.TriggerBuilder.newTrigger;/** * Created by why_768 on 2017/7/4. */public class QuartzTest {    public static void main(String[] args) {        try {            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();            scheduler.start();            // define the job and tie it to our HelloJob class            JobDetail job = newJob(HelloJob.class)                    .withIdentity("job1", "group1")                    .build();            // Trigger the job to run now, and then repeat every 40 seconds            Trigger trigger = newTrigger()                    .withIdentity("trigger1", "group1")                    .startNow()                    .withSchedule(simpleSchedule()                            .withIntervalInSeconds(1)                            .repeatForever())                    .build();            // Tell quartz to schedule the job using our trigger            scheduler.scheduleJob(job, trigger);            Thread.sleep(1000);            scheduler.shutdown();        } catch (SchedulerException e) {            e.printStackTrace();        } catch (InterruptedException e) {            e.printStackTrace();        }    }}

  只要你用StdSchedulerFactory.getDefaultScheduler()得到一个scheduler,除非使用scheduler.shutdown(),否

则这个任务将不会结束。

  下边是注释掉scheduler.shutdown()方法后的效果图:


  撤销注释后的效果图:



原创粉丝点击