http://www.quartz-scheduler.org/documentation/quartz-2.3.0/
http://www.quartz-scheduler.org/documentation/quartz-2.3.0/quick-start.html
引入依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
默认配置文件
org.quartz.core包下,有一个默认的配置文件,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
创建 Job
实现唯一的方法 execute(),方法中的代码就是任务执行的内容。此处仅输出字符串。
publicclass MyJob implements Job {
public void execute(JobExecutionContext context)throws JobExecutionException {
System.out.println("假发在哪里买的 ");
}
}
在测试类 main()方法中,把 Job进一步包装成 JobDetail。
必须要指定 JobName和 groupName,两个合起来是唯一标识符。
可以携带 KV的数据(JobDataMap),用于扩展属性,在运行的时候可以从 context获取到。
JobDetail jobDetail = JobBuilder.newJob(MyJob1.class)
.withIdentity("job1", "group1")
.usingJobData("gupao","2673")
.usingJobData("moon",5.21F)
.build();
创建 Trigger
在测试类 main()方法中,基于 SimpleTrigger定义了一个每 2秒钟运行一次、不断重复的 Trigger:
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(2)
.repeatForever())
.build();
创建 Scheduler
在测试类 main()方法中,通过 Factory获取调度器的实例,把 JobDetail和 Trigger绑定,注册到容器中。
Scheduler先启动后启动无所谓,只要有 Trigger到达触发条件,就会执行任务。
SchedulerFactory factory =new StdSchedulerFactory();
Schedulerscheduler =factory.getScheduler();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
注意这里,调度器一定是单例的。