首页 > 代码库 > quartz 实例记录
quartz 实例记录
之前介绍过了quartz的一些相关理论知识,感觉上挺简单的,实际动手操作也确实如此,去quartz的官网上把Jar包下载下来以后,会看到它的目录里有例子程序,看完第一个例子觉得还可以,但是看后面两个例子程序有点让人小小的无语,可能quartz觉得程序写的越多,给出的使用方法也会越多,但是看上去很乱,而且大部分代码是重复的,所以我把他们简单化成一个例子,把它们记录下来。
本文一共有两个例子,这两个例子共用一个Job的实现,叫MyJob类,代码如下
package com.jll.quartz;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class MyJob implements Job { private static Logger logger = LoggerFactory.getLogger(MyJob.class); @Override public void execute(JobExecutionContext context) throws JobExecutionException { logger.info(context.getJobDetail().getKey() + " start to work at" + new Date()); }}
下面的代码是第一个例子,设置重复的次数和重复时间的
package com.jll.quartz;import java.util.Date;import org.quartz.DateBuilder;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.SimpleScheduleBuilder;import org.quartz.SimpleTrigger;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class SimpleExample { public void run() throws SchedulerException{ Logger log = LoggerFactory.getLogger(SimpleExample.class); log.info("------- Initializing ----------------------"); SchedulerFactory factory = new StdSchedulerFactory(); Scheduler sched = factory.getScheduler(); log.info("------- Initialization Complete -----------"); log.info("------- Scheduling Job -------------------"); Date startTime = DateBuilder.evenMinuteDate(new Date()); JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build(); SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startAt(startTime).withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).withRepeatCount(10)).build(); Date ft = sched.scheduleJob(job, trigger); log.info(job.getKey() + " will run at: " + ft + " and repeat: " + trigger.getRepeatCount() + " times, every " + trigger.getRepeatInterval() / 1000L + " seconds"); sched.start(); try { Thread.sleep(30000L); } catch (Exception e) { } } public static void main(String[] args) throws Exception { SimpleExample example = new SimpleExample(); example.run(); } }
从代码中可以看出来任务重复10次,每1秒重复一次
第二个例子是使用CronExpression表达式的,
package com.jll.quartz;import java.util.Date;import org.quartz.CronScheduleBuilder;import org.quartz.CronTrigger;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.SchedulerMetaData;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class CronExpressionExample { public void run() throws SchedulerException { Logger log = LoggerFactory.getLogger(CronExpressionExample.class); SchedulerFactory factory = new StdSchedulerFactory(); Scheduler sched = factory.getScheduler(); JobDetail job = JobBuilder.newJob(MyJob.class) .withIdentity("job1", "group1").build(); CronTrigger trigger = TriggerBuilder .newTrigger() .withIdentity("trigger1", "group1") .withSchedule( CronScheduleBuilder.cronSchedule("0/2 * * * * ?")) .build(); Date date = sched.scheduleJob(job, trigger); log.info(job.getKey() + " has been scheduled to run at: " + date + " and repeat based on expression: " + trigger.getCronExpression()); sched.start(); log.info("------- Started Scheduler -----------------"); try { Thread.sleep(30000L); } catch (Exception e) { } log.info("------- Shutting Down ---------------------"); sched.shutdown(true); log.info("------- Shutdown Complete -----------------"); SchedulerMetaData metaData = sched.getMetaData(); log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs."); } public static void main(String[] args) throws Exception { CronExpressionExample example = new CronExpressionExample(); example.run(); }}
从上面的代码可以看出来任务每两秒钟执行一次,主线程30秒后死亡。
quartz 实例记录
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。