`
rensanning
  • 浏览: 3548174 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38136
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607282
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682291
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89331
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401828
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69688
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91697
社区版块
存档分类
最新评论

Java作业调度之Quartz

    博客分类:
  • Java
 
阅读更多
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 jobKey
scheduler.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();


10、取消/删除作业
// removes the given trigger
sched.unscheduleJob(new TriggerKey("job10", "group10"));	
// removes all triggers to the given job
sched.deleteJob(new JobKey("job10", "group10"));


11、作业出错时自动再执行

一直执行到成功:
JobExecutionException e2 = new JobExecutionException(e);
// fire it again
e2.setRefireImmediately(true);
throw e2;


执行n次后停止:
// allow 5 retries
if (count >= 5) {
	JobExecutionException e = new JobExecutionException(
			"Retries exceeded");
	//make sure it doesn't run again
	e.setUnscheduleAllTriggers(true);
	throw e;
}


12、与Spring等框架的集成
略...

JWatch - A Quartz Monitor
http://code.google.com/p/jwatch/



Cron 表达式生成器 CronMaker

  • 大小: 56.9 KB
  • 大小: 142.8 KB
  • 大小: 11.1 KB
分享到:
评论
2 楼 beiwang 2014-08-02  
恩,这个不错 在用.net版本的呵呵
http://www.tc5u.com
1 楼 azhqiang 2014-08-02  
刚好要用到调度,学习了。

相关推荐

    Java 定时任务及作业调度 Quartz与Timer

    Java定时任务和作业调度在软件...总的来说,理解并掌握Java的定时任务和作业调度,无论是Quartz还是Timer,都是提升开发效率和系统自动化能力的重要技能。通过实践和不断探索,可以更好地利用这些工具为项目带来便利。

    java 工作调度框架 quartz jcrotab

    Quartz是Java领域内一个功能强大的开源作业调度框架,它允许开发者安排任务在特定时间执行,甚至可以处理并发任务和复杂的调度需求。Quartz提供了丰富的API,可以创建、触发、管理和监控作业与触发器。其主要特点...

    Quartz(作业调度)

    Quartz是一款开源的作业调度框架,它为Java应用程序提供了强大的定时任务处理能力。在Spring框架中,Quartz可以被集成来实现复杂的定时任务调度。本文将深入探讨Quartz的使用,包括其基本概念、配置、API以及在Web...

    作业调度:Quartz

    Quartz 是个开源的作业调度框架,为在Java 应用程序中进行作业调度提供了简单而强大的机制。Quartz 允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。...

    作业调度框架Quartz1.8

    Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的...

    Quartz Job实现java任务调度

    Quartz是功能强大的开源作业调度库,几乎可以集成到任何Java应用程序中-从最小的独立应用程序到最大的电子商务系统。Quartz可用于创建简单或复杂的计划,以执行数以万计,数以万计的工作;任务定义为标准Java组件的...

    Quartz作业调度框架

    Quartz作业调度框架是Java领域中非常重要的一个开源作业调度库。作业调度是指在预定的时间安排特定的任务进行执行。在企业级应用中,作业调度扮演着核心的角色,它使得企业能够自动化地执行定时任务,比如数据备份、...

    Java任务调度框架Quartz1.8.6教程实例源代码

    Quartz是一个开源的作业调度框架,它允许开发者创建、调度和管理任务,这些任务可以在特定时间自动执行。Quartz支持简单和复杂的调度策略,如一次性执行、周期性执行或按照特定的时间表达式执行。其设计目标是为应用...

    作业调度Quartz小例子

    Quartz 是一个高度可扩展和灵活的开源作业调度框架,主要设计用于在 Java 应用程序中实现定时任务的调度。它的核心功能是基于时间触发器执行预先定义的任务,这使得开发者可以设置作业在特定时间点或者按照周期性...

    Java中使用Quartz实现任务自动调度的经典例子!

    Quartz是Java中一个强大的开源任务调度库,它允许开发者定义和执行短时或周期性的任务。这个经典例子展示了如何在Java项目中集成并使用Quartz进行任务自动调度。通过以下内容,我们将深入理解Quartz的基本概念、配置...

    spring-Quartz(作业调度)

    Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的...

    Quartz一个开源的作业调度框架

    Quartz是一个广泛应用于企业级应用中的开源作业调度框架,它为开发者提供了强大的任务调度功能,使得应用程序能够在预定的时间执行特定的任务。Quartz的核心设计目标是简单易用且可高度扩展,能够满足从小型项目到...

    quartz开源作业调度框架

    Quartz是一个功能强大的、开源的作业调度框架,完全由Java编写而成。它能够被应用在服务器端的Java应用程序中,帮助开发者轻松地创建并管理定时任务。Quartz支持多种复杂的触发规则,并且具有高度的灵活性和可扩展性...

    Quartz一个开源作业调度框架

    Quartz 是一个强大的开源作业调度框架,主要用于自动化执行任务,如定时发送邮件、执行数据清理、执行批处理等。...总的来说,Quartz 是一个强大且灵活的作业调度解决方案,广泛应用于各种 Java 应用程序中。

    quartz作业调度测试

    Quartz是一款开源的作业调度框架,它允许开发者创建、组织和执行定时任务。在Java开发环境中,Quartz常被用于实现复杂的工作调度需求,比如定时发送邮件、执行数据同步或者在特定时间运行某些业务逻辑。这个"quartz...

    java任务调度quartz实例

    Java任务调度库Quartz是一个强大的开源任务调度框架,它允许开发者在Java应用程序中安排复杂的作业执行。本实例提供了一个简洁的、易于理解的Quartz应用示例,旨在帮助开发者快速集成到自己的项目中。 首先,Quartz...

    JAVA定时调度框架-Quartz使用入门到精通.doc

    Quartz 是一个强大的开源作业调度框架,专为 Java 平台设计,无论是 J2SE 还是 J2EE 应用都可以使用。它的主要目的是提供一个简单易用但功能丰富的任务调度解决方案。Quartz 具备数据库支持、集群功能、插件机制、...

    Java使用quartz实现任务调度定时任务

    在Java世界里,Quartz是一个强大的、完全开源的作业调度框架,广泛用于构建复杂的时间触发任务。本篇文章将深入探讨如何使用Quartz在Java应用程序中实现任务调度。 Quartz库提供了一个灵活的API,可以创建、调度和...

Global site tag (gtag.js) - Google Analytics