quartz

来源:互联网 发布:数据备份与还原 编辑:程序博客网 时间:2024/04/26 16:21
 

好久之前用过quartz来跑定时任务,近期工作上轻松一点,回头来回味一下

细节先不说,把基本的配置先贴上来,确保可以跑出基本的服务。我没有配置spring,直接在web.xml中配置了quartz,步骤如下:

1.下载jar

网址http://www.terracotta.org/dl/quartz-oss-sign-up我用的1.8.5版本,没有用最新的2.0.1版本

2.配置web.xml

  <servlet>
     <servlet-name>quartz</servlet-name>
     <servlet-class>
         org.quartz.ee.servlet.QuartzInitializerServlet
     </servlet-class>
     <init-param>
         <param-name>config-file</param-name>

<!-- 在src下新建目录configFiles用来存放各种插件的配置文件 -->
         <param-value>/configFiles/quartz.properties</param-value>
     </init-param>
     <init-param>
         <param-name>shutdown-on-unload</param-name>
         <param-value>true</param-value>
     </init-param>
     <init-param>
         <param-name>start-scheduler-on-load</param-name>
         <param-value>true</param-value>
     </init-param>  
     <load-on-startup>1</load-on-startup>
  </servlet>

3.编写quartz.properties文件

如果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
#============================================================================
# Configure Plugins
#============================================================================
#注意1.5版本之后,这个改名了。参数项也变了
#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin

#如果这里不指定,默认会读取WEB-INFO/CLASSES目录下的quartz_jobs.xml文件,名称不能改变

#如果有多个job xml文件,使用","隔开
org.quartz.plugin.jobInitializer.fileNames = /configFiles/quartz_jobs.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.jobInitializer.scanInterval = 60
org.quartz.plugin.jobInitializer.wrapInUserTransaction =false

4.添加quartz.jobs.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingDatahttp://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
  version="1.8">

 <schedule>
  <job>
   <name>HelloWorldJob</name>
   <job-class>com.stock.finance.job.TestJob</job-class>
   <volatility>false</volatility>
   <durability>false</durability>
   <recover>false</recover>
  </job>
  <trigger>
  <simple>
   <name>helloWorldTrigger</name>
   <job-name>HelloWorldJob</job-name>
   <start-time>2011-05-17T15:53:00</start-time>
   <repeat-count>-1</repeat-count>
   <repeat-interval>30000</repeat-interval>
  </simple>
  </trigger>
 </schedule>
</job-scheduling-data>

 

Quartz的几个核心的接口和类为:   

Job接口:自己写的“定时程序”实现此接口的void execute(JobExecutionContext arg0)方法,Job还有一类为有状态的StatefulJob接口,如果我们需要在上一个作业执行完后,根据其执行结果再进行下次作业的执行,则需要实现此接口。   

Trigger抽象类:调度类(Scheduler)在时间到时调用此类,再由trigger类调用指定的定时程序。   

Quertz中提供了两类触发器为:SimpleTrigger,CronTrigger。前者用于实现比较简单的定时功能,例如几点开始,几点结束,隔多长时间执行,共执行多少次等,后者提供了使用表达式来描述定时功能,因此适用于比较复杂的定时描述,例如每个月的最后一个周五,每周的周四等。   

JobDetail类:具体某个定时程序的详细描述,包括Name,Group,JobDataMap等。   

JobExecutionContext类:定时程序执行的run-time的上下文环境,用于得到当前执行的Job的名字,配置的参数等。   

JobDataMap类:用于描述一个作业的参数,参数可以为任何基本类型例如String,float等,也可为某个对象的引用.   

JobListener,TriggerListener接口:用于监听触发器状态和作业扫行状态,在特写状态执行相应操作。   

JobStore类:在哪里执行定进程序,可选的有在内存中,在数据库中。

 

原创粉丝点击