Quartz 是一个完全由java编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。
由James House创建并最初于2001年春天被加入sourceforge工程。之后归入OpenSymphony开源组织(2010年11月份关闭)。Terracotta公司在2009年收购了著名的Java开源缓存项目Ehcache以及Java任务调度项目Quartz。
http://quartz-scheduler.org/downloads/catalog
版本:Quartz 2.1.7
1、开始时间 startAt
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
Date runTime = DateBuilder.evenSecondDate(new Date());
JobDetail job = JobBuilder.newJob(Job1.class).withIdentity("job1", "group1").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1","group1").startAt(runTime).build();
sched.scheduleJob(job, trigger);
sched.start();
2、简单触发器 withSchedule
SimpleScheduleBuilder.simpleSchedule() 可以设置间隔、重复次数
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail job = JobBuilder.newJob(Job2.class).withIdentity("job2", "group2").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger2","group2")
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1).repeatForever()).build();
sched.scheduleJob(job, trigger);
sched.start();
3、Cron触发器
CronScheduleBuilder.cronSchedule("0/5 * * * * ?") 使用Unix cron表达式
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
JobDetail job = JobBuilder.newJob(Job3.class).withIdentity("job3", "group3").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger3","group3")
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
sched.scheduleJob(job, trigger);
sched.start();
4、结束时间 endAt
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
Date runTime = DateBuilder.evenSecondDate(new Date());
Date endTime = DateBuilder.evenMinuteDate(new Date());
JobDetail job = JobBuilder.newJob(Job4.class).withIdentity("job4", "group4").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger4","group4")
.startAt(runTime).withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(1).repeatForever()).endAt(endTime).build();
sched.scheduleJob(job, trigger);
sched.start();
5、作业监听器 addJobListener
JobKey jobKey = new JobKey("dummyJobName", "group5");
JobDetail job = JobBuilder.newJob(Job5.class).withIdentity(jobKey).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("dummyTriggerName", "group5").withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
// Listener attached to jobKeyscheduler.getListenerManager().addJobListener(new Job5Listener(),KeyMatcher.keyEquals(jobKey));
// Listener attached to group named "group 1" only.// scheduler.getListenerManager().addJobListener(// new HelloJobListener(), GroupMatcher.jobGroupEquals("group1")// );
scheduler.start();
scheduler.scheduleJob(job, trigger);
6、启动多个作业 scheduleJob
JobKey jobKeyA = new JobKey("job6A", "group6");
JobDetail jobA = JobBuilder.newJob(Job6A.class).withIdentity(jobKeyA).build();
JobKey jobKeyB = new JobKey("job6B", "group6");
JobDetail jobB = JobBuilder.newJob(Job6B.class).withIdentity(jobKeyB).build();
JobKey jobKeyC = new JobKey("job6C", "group6");
JobDetail jobC = JobBuilder.newJob(Job6C.class).withIdentity(jobKeyC).build();
Trigger trigger1 = TriggerBuilder.newTrigger().withIdentity("dummyTriggerName1", "group6").withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
Trigger trigger2 = TriggerBuilder.newTrigger().withIdentity("dummyTriggerName2", "group6").withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
Trigger trigger3 = TriggerBuilder.newTrigger().withIdentity("dummyTriggerName3", "group6").withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(jobA, trigger1);
scheduler.scheduleJob(jobB, trigger2);
scheduler.scheduleJob(jobC, trigger3);
7、列举所有作业 getJobKeys
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
for (String groupName : scheduler.getJobGroupNames()) {for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) {String jobName = jobKey.getName();
String jobGroup = jobKey.getGroup();
List<Trigger> triggers = (List<Trigger>) scheduler.getTriggersOfJob(jobKey);
Date nextFireTime = triggers.get(0).getNextFireTime();
System.out.println("[jobName] : " + jobName + " [groupName] : " + jobGroup + " - " + nextFireTime);
}}
8、手动触发作业 triggerJob
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
Date runTime = DateBuilder.evenSecondDate(new Date());
JobDetail job = JobBuilder.newJob(Job8.class).withIdentity("job8", "group8").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger8","group8").startAt(runTime).build();
sched.scheduleJob(job, trigger);
sched.start();
sched.triggerJob(new JobKey("job8", "group8"));
sched.triggerJob(new JobKey("job8", "group8"));
9、传递参数 usingJobData
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
Date runTime = DateBuilder.evenSecondDate(new Date());
JobDetail job = JobBuilder.newJob(Job9.class).withIdentity("job9", "group9").usingJobData("jobSays", "Hello Quartz!").build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger9","group9").startAt(runTime).build();
sched.scheduleJob(job, trigger);
sched.start();
相关推荐
含quartz在spring中的配置、spring.jar quartz.jar cron表达式
定时器的配置文件(两种方式:springmvc自带定时,Quartz与spring结合的定时)
Spring中的Quartz配置-Spring-定时器-java定时器.doc
SpringQuartz定时器的配置[参照].pdf
SpringQuartz定时器的配置[归类].pdf
配置Spring+quartz定时器
我自己亲自测试过的例子,spring quartz定时器的简单配置和使用,保证成功运行
quartz定时器的用法(简单和动态配置),本人已测试过,可用
Quartz 定时器 有源代码示例和配置说明,拿去复制即可
Quartz定时器。Spring中Quartz的配置
这个是个简单的quartz定时器,java类和配置文件都已经写好,怎么配置和设置时间都有详细的说明,下载即可用。
定时任务quartz实现分组串行并行动态配置
spring+quartz配置的定时器 可以动态添加任务
当服务启动时自动调用某一个类中的方法,相隔一段时间后再重复执行该方法(相隔时间在配置文件中自己配置,此例直接运行即可)
待完善。简单的例子,免费下载。参考http://www.meiriyouke.net/?p=82 谢谢原作者 也谢谢ZJ
传统Spring+Quartz实现的定时器一般都是通过配置文件中配置的,这就意味着如果我们修改了定时任务的时间,就得重新启动一下Tomcat,而且每次新建一个任务就得在spring中添加相关的配置信息,非常麻烦。基于上面的...
Spring两种定时器实例配置:Java的TimerTask类和OpenSymphony的Quartz。包含5种配置方式:timer普通定时器、timer特定方法定时器、quartz简单定时器、quartz精确定时器、quartz特定方法定时器。简单实用,一看就会。
spring管理quart实现定时器功能,不需要在web.xml进行任何配置,spring统一管理,可下载直接复制到项目中使用
在实际项目应用中经常会用到定时任务,可以通过quartz和spring的简单配置即可完成,但如果要改变任务的执行时间、频率,废弃任务等就需要改变配置甚至代码需要重启服务器,这里介绍一下如何通过quartz与spring的组合...