quartz2实战
quartz,java,任务调度2016-06-14
上篇文章介绍了java的几种任务调度实现的方式,今天用一个例子来说明一下
quartz 2的使用方法。
Talk is cheap, show me the code. 废话不多说!
package quartz2;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzTest {
public static void main(String[] args) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
// Grab the Scheduler instance from the Factory
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("param1", "a");
jobDataMap.put("param2", "a");
// define the job and tie it to our HelloJob class
JobDetail job = newJob(HelloJob.class)
.withIdentity("job1", "group1")
// set JobDataMap to transfer parameters
.setJobData(jobDataMap)
.build();
// Trigger the job to run now, and then repeat every 5 seconds
Trigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
//start at
//.startAt(format.parse("2016-06-14 17:25:00"))
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(5)
.repeatForever())
.build();
// Tell quartz to schedule the job using our trigger
scheduler.scheduleJob(job, trigger);
// start it
scheduler.start();
// stop it
//scheduler.shutdown(true);
} catch (SchedulerException se) {
se.printStackTrace();
}
}
}
package quartz2;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job{
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
System.out.println("Hello World! - " + new Date());
System.out.println("param1=" + dataMap.getString("param1"));
System.out.println("param2=" + dataMap.getString("param2"));
}
}
可以向 JobDataMap 中存入键/值对,那些数据对可在你的 Job 类中传递和进行访问。这是一个向你的 Job 传送配置的信息便捷方法。
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put(“param1”, “a”);
jobDataMap.put(“param2”, “a”);
JobDetail job = newJob(HelloJob.class)
.withIdentity(“job1”, “group1”)
// set JobDataMap to transfer parameters
.setJobData(jobDataMap)
.build();
通过 JobExecutionContext 对象访问 JobDataMap
JobExecutionContext 对象让 Job 能访问 Quartz 运行时候环境和 Job 本身的明细数据。这就类似于在 Java Web 应用中的 servlet 访问 ServletContext 那样。通过 JobExecutionContext,Job 可访问到所处环境的所有信息,包括注册到 Scheduler 上与该 Job 相关联的 JobDetail 和 Triiger
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
System.out.println(“Hello World! - ” + new Date());
System.out.println(“param1=” + dataMap.getString(“param1”));
System.out.println(“param2=” + dataMap.getString(“param2”));