quartz.properties
#============================================================================ # Configure Main Scheduler Properties #============================================================================ org.quartz.scheduler.instanceName = TestScheduler org.quartz.scheduler.instanceId = AUTO #============================================================================ # Configure ThreadPool #============================================================================ org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 3 org.quartz.threadPool.threadPriority = 5 #============================================================================ # Configure JobStore #============================================================================ #org.quartz.jobStore.misfireThreshold = 60000 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore #============================================================================ # 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.fileNames = quartz_jobx.xml #org.quartz.plugin.jobInitializer.overWriteExistingJobs = true #org.quartz.plugin.jobInitializer.failOnFileNotFound = true #org.quartz.plugin.jobInitializer.scanInterval = 10 #org.quartz.plugin.jobInitializer.wrapInUserTransaction =false #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 = quartz_jobs.xml org.quartz.plugin.jobInitializer.failOnFileNotFound = true org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin org.quartz.plugin.shutdownhook.cleanShutdown =true
以上是配置属性,调用工厂的时候先调用quartz.properties文件
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/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd" version="1.8"> <schedule> <job> <name>HelloWorldJob</name> <group>DEFAULT</group> <description> this is HelloWorld...... </description> <job-class>org.xuliang.jobs.MyJob1</job-class> <volatility>false</volatility> <durability>false</durability> <recover>false</recover> </job> <trigger> <simple> <name>helloWorldTrigger</name> <job-name>HelloWorldJob</job-name> <start-time>2012-06-07T18:54:25</start-time> <repeat-count>5</repeat-count> <repeat-interval>1000</repeat-interval> </simple> </trigger> <job> <name>aa</name> <group>DEFAULT</group> <job-class>org.xuliang.jobs.MyJob1</job-class> <volatility>false</volatility> <durability>false</durability> <recover>false</recover> </job> <trigger> <cron> <name>aa_trigg</name> <job-name>aa</job-name> <start-time>2012-06-15T00:54:25</start-time> <cron-expression>* * * * * ?</cron-expression> </cron> </trigger> </schedule> </job-scheduling-data>
SimpleScheduler.java
package org.xuliang.tests; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import org.quartz.CronTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.TriggerUtils; import org.quartz.impl.StdSchedulerFactory; import org.xuliang.jobs.MyJob1; //此项目的例子,说明简单的Quartz运行的时候,2种方式运行Quartz的方式 //声明式:增加xml和properteis文件 //编程式:删除xml和properties文件,使用scheduleJob方法 public class SimpleScheduler { public void scheduleJob(Scheduler sch) throws SchedulerException{ JobDetail jd = new JobDetail("ScanDirectory", Scheduler.DEFAULT_GROUP, MyJob1.class); jd.getJobDataMap().put("SCAN_DIR", "src"); //每3秒钟执行一次 Trigger trig = TriggerUtils.makeSecondlyTrigger(3); trig.setStartTime(new Date());//从现在开始 trig.setName(jd.getName()+"-Trigger"); sch.scheduleJob(jd, trig); } public void test1(Scheduler sch) throws SchedulerException, ParseException{ JobDetail jd = new JobDetail("job1", Scheduler.DEFAULT_GROUP, MyJob1.class); CronTrigger ct = new CronTrigger(jd.getName()+"-trig",Scheduler.DEFAULT_GROUP,"50 * * * * ?"); sch.scheduleJob(jd,ct); } //见源码,有X种方式获得工厂,注意工厂的构造函数,和initialize 方法 public Scheduler getScheduler() throws SchedulerException{ return new StdSchedulerFactory("quartz.properties").getScheduler(); // return StdSchedulerFactory.getDefaultScheduler(); } public static void main(String[] args) throws SchedulerException, ParseException { SimpleScheduler ss = new SimpleScheduler(); Scheduler sch = ss.getScheduler(); // ss.test1(sch); sch.start(); } }