quartz2实战

来源:互联网 发布:23周胎儿四维数据 编辑:程序博客网 时间:2024/06/06 07:44

上篇文章介绍了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”));

0 0