Quartz 介绍(单独使用)
Quartz是一个java调度框架,主要由三部分组成:
1. Job。这是具体的一个job,需要实现Job接口的execute方法
2. Trigger。这个trigger是用来定义调度方式,一个trigger只能对应一个Job
3. Schedule,总调度进程。由它进行管理调度。
Simple Example:
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();
// Trigger the job to run on the next round minute
Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runTime).build();
// Tell quartz to schedule the job using our trigger
sched.scheduleJob(job, trigger);
sched.start();//启动调动
还可以使用配置来进行调度。那么需要在获取指定一个properties文件和定义job的xml。
具体如下:
quartz.properties
org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames = config/quartz-config.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
quartz-config.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>MineWarnJob</name>
<group>WeatherReport</group>
<description>This is a weather Job of mine!</description>
<job-class>com.sut.main.tools.job.MineWarnJob</job-class>
</job>
<trigger>
<cron>
<name>MineWeatherTrigger</name>
<group>WeatherTrigger</group>
<job-name>MineWarnJob</job-name>
<job-group>WeatherReport</job-group>
<!-- everyday American Time 18 , Beijing 6 o'clock -->
<cron-expression>00 00 18 ? * MON-FRI</cron-expression>
</cron>
</trigger>
</schedule>
</job-scheduling-data>
Main class。(关键是指定properties给schedulerFactory)
Properties props = new Properties();
props.load(WeatherReport.class.getClassLoader().getResourceAsStream("config/quartz.properties"));
String value = props.getProperty("org.quartz.threadPool.threadCount");
if(value == null || value.equals("")){
log.info("获取propeties为空!");
return;
}
//First we must get a reference to a scheduler
SchedulerFactory sf = new StdSchedulerFactory(props);
Scheduler sched = null;
...
//这里就可以直接start了,会自动加载xml中定义的job
sched = sf.getScheduler();
sched.start();