Quartz版本:2.2.1
一,可以使用crontab风格定义时间规则
任务实现类(实现Job接口):
package com.sean;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class MyJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
Task.myJobLog.info("[" + context.getJobDetail().getKey() + "]My Job!!!");
}
}
任务调度类:
package com.sean;
import java.util.Date;
import org.apache.log4j.Logger;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class Task {
public static Logger myJobLog = Logger.getLogger("MyJob");
public static void main(String[] args){
try{
SchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
JobDetail job = JobBuilder.newJob(MyJob.class)
.withIdentity("MyJob", "MyGroup")
.build();
CronTrigger trigger = (CronTrigger)TriggerBuilder.newTrigger()
.withIdentity("Trigger", "MyGroup")
.startAt(new Date(System.currentTimeMillis()+5*1000))
.endAt(new Date(System.currentTimeMillis()+5*1000+60*1000))
.withSchedule(CronScheduleBuilder.
cronSchedule("0/10 * * * * ?"))
.build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
Thread.sleep(2*60*1000);
scheduler.shutdown(true);
}catch(Exception e){
e.printStackTrace();
}
}
}
log4j.properties:
log4j.rootLogger=info,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{MM-dd HH:mm:ss}->%m%n
log4j.logger.MyJob=info,MyJob
log4j.appender.MyJob=org.apache.log4j.RollingFileAppender
log4j.additivity.MyJob=false
log4j.appender.MyJob.File=./log/MyJob.log
log4j.appender.MyJob.MaxFileSize=10MB
log4j.appender.MyJob.MaxBackupIndex=0
log4j.appender.MyJob.layout=org.apache.log4j.PatternLayout
log4j.appender.MyJob.layout.ConversionPattern=%d{MM-dd HH:mm:ss}->%m%n
由于使用StdSchedulerFactory(基于properties配置文件创建QuartzScheduler实例),如果在创建SchedulerFactory时没有通过new StdSchedulerFactory().initialize(props)指定特定的配置参数,也没有指定特定的配置文件,则程序使用quartz-2.2.1.jar中org\quartz下的quartz.properties作为默认的配置文件:
org.quartz.scheduler.instanceName: DefaultQuartzScheduler
org.quartz.scheduler.rmi.export: false
org.quartz.scheduler.rmi.proxy: false
org.quartz.scheduler.wrapJobExecutionInUserTransaction: false
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 10
org.quartz.threadPool.threadPriority: 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true
org.quartz.jobStore.misfireThreshold: 60000
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore
控制台显示结果:
08-07 14:28:06->Using default implementation for ThreadExecutor
08-07 14:28:06->Job execution threads will use class loader of thread: main
08-07 14:28:06->Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
08-07 14:28:06->Quartz Scheduler v.2.2.1 created.
08-07 14:28:06->RAMJobStore initiali