- 浏览: 25555 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
woshixushigang:
问下,如何重写自己的格式化信息 message="x ...
Spring中的用于格式化的annotation -
congenlv:
<pre name="code" c ...
Quartz学习笔记(一) -
congenlv:
<pre name="code" c ...
Quartz学习笔记(一) -
lzq570:
有完整demo吗?能否发一个
Quartz学习笔记(一) -
ideal46:
开始学习weblogic portal
WebLogic Portal 学习笔记(界面显示)
因为下个项目需要用到定时器,以前写定时器用的是 Timer类,都是一些比较简单的 Task ,这次的后台 Task 比较多,并且业务也相对复杂,所有再看需求 的同时,自己了看了下Quartz,先将学习笔记总结如下:
1、Quartz 简介
a、Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。
b、主页:http://www.quartz-scheduler.org/
c、目前最近版本:Quartz 1.8.0 Released - 04/22/2010
2、笔记记录:
a、构建一个简单的 Quartz 程序
MySimpleExample.java
HellowWorld.java
这里说下HellowWord类,此类实现了 Job 接口,重写了 Job 接口中的 execute 方法,当调度程序开始运行后,系统会自动调用 HelloWorld 的 execute 方法,也就相当于 TimerTask类中的 run 方法。
b、Quartz 支持同时运行多个 Job,他会根据 quartz.properties 初始化相应的线程
c、Quartz 支持两种触发器,分别是:SimpleTrigger 和 CronTrigger,SimpleTrigger 适合一些简单的设置,例如:从什么时候开始,到什么时候,每间隔多少时间执行一次,一共执行多少次;如果你要实现一些比较复杂定时功能,就必须用 CronTrigger 类,他支持 Unix 的语言(Unix我也不熟)“0/20 * * * * ?”。
d、Quartz 中参数的设置
Quartz 中的 JobDataMap 类,提供参数的存储,此类相当于 HaspMap 类,以键/值的方式存储数据,可以通过 JobExecutionContext 上下问类来获取 JobDataMap 的实例。
e、Quartz 可以设置打火策略
f、Quartz 可以设置运行失败后就行的操作
g、Quartz 跳过特殊日期
Quartz 支持在规定好的时间内将写特定时间跳过
h、Quartz 监听器
Quartz 支持监听器功能,目前可以监听三种状态:jobExecutionVetoed(Job执行被拒接)、jobToBeExecuted(job执行之前)、jobWasExecuted(job)执行之后。如果你想监听这些状态并想作出行为的话,需要实现 Quartz 提供的 JobListener 接口,并实现相应的方法,在其中写你要执行的程序
i、Quartz 支持插件功能
Quartz 可以通过读取xml来设置相应的参数,这样你就可以通过修改xml来修改相应的参数
j、其他
Quartz 支持读取远程DB、支持优先级的设置、服务器集群等等等等。
3、总结
Quartz 支持的功能很多,用起来比较灵活,修改配置也很方便,并且 spring 对其也有支持,提供把 Quartz 整合在项目中。因为时间比较仓促,抽出了两天的时候才看 Quartz,所以了解的还是比较简单的,如果有什么问题或者错误还希望大家指出来,以便共同探讨,及时修改。
[code="java">
Timer无论何时都不要用
简单的定时任务没有必要用quartz
ScheduledExecutorService能够搞定一切
以前一直用的Timer后来才发现的Quartz,抽空看了下,发现用起来很方便,功能很强大,所以决定以后就用这个了!
Timer无论何时都不要用
简单的定时任务没有必要用quartz
ScheduledExecutorService能够搞定一切
1、Quartz 简介
a、Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。
b、主页:http://www.quartz-scheduler.org/
c、目前最近版本:Quartz 1.8.0 Released - 04/22/2010
2、笔记记录:
a、构建一个简单的 Quartz 程序
MySimpleExample.java
package com.sc.quartz.myexamples; import java.util.Date; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.SimpleTrigger; import org.quartz.TriggerUtils; import org.quartz.impl.StdSchedulerFactory; public class MySimpleExample { public void run() throws SchedulerException{ // 创建调度者工厂 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); // 用工厂创建一个调度者 Scheduler scheduler = schedulerFactory.getScheduler(); // 利用 Quartz 提供的 getNextGivenSecondDate 返回一个当前时间四舍五入的 5 的倍数时间 long ts = TriggerUtils.getNextGivenSecondDate(null, 5).getTime(); // 创建一个工作,并命名为‘job1’,放入‘group1’组中,HellowWorl 是在此工作中需要执行的类 JobDetail jobDetail = new JobDetail("job1","group1",HelloWorld.class); // 创建一个触发器,并命名为‘trigger1’,将此触发器设置在 ‘job1’ 上 ,并设置什么情况下启动 SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1","job1", new Date(ts), null, -1, 1000L); // 将 ‘job1’ 加入调度者中, scheduler.scheduleJob(jobDetail, simpleTrigger); // 开始运行调度程序 scheduler.start(); // 停止调度程序 // scheduler.shutdown(true); } public static void main(String[] args) throws SchedulerException { MySimpleExample example = new MySimpleExample(); example.run(); } }
HellowWorld.java
package com.sc.quartz.myexamples; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class HelloWorld implements Job { public void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println("Hello World..."); } }
这里说下HellowWord类,此类实现了 Job 接口,重写了 Job 接口中的 execute 方法,当调度程序开始运行后,系统会自动调用 HelloWorld 的 execute 方法,也就相当于 TimerTask类中的 run 方法。
b、Quartz 支持同时运行多个 Job,他会根据 quartz.properties 初始化相应的线程
c、Quartz 支持两种触发器,分别是:SimpleTrigger 和 CronTrigger,SimpleTrigger 适合一些简单的设置,例如:从什么时候开始,到什么时候,每间隔多少时间执行一次,一共执行多少次;如果你要实现一些比较复杂定时功能,就必须用 CronTrigger 类,他支持 Unix 的语言(Unix我也不熟)“0/20 * * * * ?”。
// 表达式:从当前开始,没20秒执行一次,‘秒’ CronTrigger trigger = new CronTrigger("trigger1", "group1", "job1", "group1", "0/20 * * * * ?");
d、Quartz 中参数的设置
Quartz 中的 JobDataMap 类,提供参数的存储,此类相当于 HaspMap 类,以键/值的方式存储数据,可以通过 JobExecutionContext 上下问类来获取 JobDataMap 的实例。
// 获取上下文,并取出‘FAVORITE_COLOR’键对应的值 JobDataMap data = context.getJobDetail().getJobDataMap(); String favoriteColor = data.getString(FAVORITE_COLOR); // 为 ‘FAVORITE_COLOR’重新赋值 data.put(EXECUTION_COUNT, count);
e、Quartz 可以设置打火策略
trigger.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT);
f、Quartz 可以设置运行失败后就行的操作
// 报错后立即重新运行 e2.setRefireImmediately(true); // 报错后停止运行 e2.setUnscheduleAllTriggers(true);
g、Quartz 跳过特殊日期
Quartz 支持在规定好的时间内将写特定时间跳过
// Add the holiday calendar to the schedule // 创建假期日期 AnnualCalendar holidays = new AnnualCalendar(); // halloween (Oct 31) Calendar halloween = new GregorianCalendar(2005, 9, 31); // 设置跳过这一天 holidays.setDayExcluded(halloween, true); // 将此 holidays 告知调度者 sched.addCalendar("holidays", holidays, false, false);
h、Quartz 监听器
Quartz 支持监听器功能,目前可以监听三种状态:jobExecutionVetoed(Job执行被拒接)、jobToBeExecuted(job执行之前)、jobWasExecuted(job)执行之后。如果你想监听这些状态并想作出行为的话,需要实现 Quartz 提供的 JobListener 接口,并实现相应的方法,在其中写你要执行的程序
i、Quartz 支持插件功能
Quartz 可以通过读取xml来设置相应的参数,这样你就可以通过修改xml来修改相应的参数
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.fileNames = quartz_data.xml org.quartz.plugin.jobInitializer.failOnFileNotFound = true org.quartz.plugin.jobInitializer.scanInterval = 120 org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
j、其他
Quartz 支持读取远程DB、支持优先级的设置、服务器集群等等等等。
3、总结
Quartz 支持的功能很多,用起来比较灵活,修改配置也很方便,并且 spring 对其也有支持,提供把 Quartz 整合在项目中。因为时间比较仓促,抽出了两天的时候才看 Quartz,所以了解的还是比较简单的,如果有什么问题或者错误还希望大家指出来,以便共同探讨,及时修改。
评论
5 楼
congenlv
2012-04-11
引用
[b][/b][b][/b][i][/i]]
4 楼
congenlv
2012-04-11
JobDetailImpl jobDetail = new JobDetailImpl(); jobDetail.setJobClass(jobClass); jobDetail.setDescription(collectionType.getLabel()); jobDetail.setKey(jobKey); jobDetail.setDurability(true); jobDetail.setRequestsRecovery(true); jobDetail.setJobDataMap(jobDataMap); // 触发器 CronTriggerImpl trigger = new CronTriggerImpl();// 触发器名,触发器组 trigger.setKey(triggerKey); trigger.setJobKey(jobKey); trigger.setCronExpression(cromExpression);// 触发器时间设定 sched.scheduleJob(jobDetail, trigger); // 启动 if (!sched.isShutdown()) { sched.start(); } }
3 楼
lzq570
2011-02-10
有完整demo吗?能否发一个
2 楼
xiaoyuqi00
2010-05-27
beneo 写道
xiaoyuqi00 写道
因为下个项目需要用到定时器,以前写定时器用的是 Timer类,都是一些比较简单的 Task ,这次的后台 Task 比较多,并且业务也相对复杂,所有再看需求 的同时,自己了看了下Quartz,先将学习笔记总结如下:
1、Quartz 简介
a、Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。
b、主页:http://www.quartz-scheduler.org/
c、目前最近版本:Quartz 1.8.0 Released - 04/22/2010
2、笔记记录:
a、构建一个简单的 Quartz 程序
MySimpleExample.java
HellowWorld.java
这里说下HellowWord类,此类实现了 Job 接口,重写了 Job 接口中的 execute 方法,当调度程序开始运行后,系统会自动调用 HelloWorld 的 execute 方法,也就相当于 TimerTask类中的 run 方法。
b、Quartz 支持同时运行多个 Job,他会根据 quartz.properties 初始化相应的线程
c、Quartz 支持两种触发器,分别是:SimpleTrigger 和 CronTrigger,SimpleTrigger 适合一些简单的设置,例如:从什么时候开始,到什么时候,每间隔多少时间执行一次,一共执行多少次;如果你要实现一些比较复杂定时功能,就必须用 CronTrigger 类,他支持 Unix 的语言(Unix我也不熟)“0/20 * * * * ?”。
d、Quartz 中参数的设置
Quartz 中的 JobDataMap 类,提供参数的存储,此类相当于 HaspMap 类,以键/值的方式存储数据,可以通过 JobExecutionContext 上下问类来获取 JobDataMap 的实例。
e、Quartz 可以设置打火策略
f、Quartz 可以设置运行失败后就行的操作
g、Quartz 跳过特殊日期
Quartz 支持在规定好的时间内将写特定时间跳过
h、Quartz 监听器
Quartz 支持监听器功能,目前可以监听三种状态:jobExecutionVetoed(Job执行被拒接)、jobToBeExecuted(job执行之前)、jobWasExecuted(job)执行之后。如果你想监听这些状态并想作出行为的话,需要实现 Quartz 提供的 JobListener 接口,并实现相应的方法,在其中写你要执行的程序
i、Quartz 支持插件功能
Quartz 可以通过读取xml来设置相应的参数,这样你就可以通过修改xml来修改相应的参数
j、其他
Quartz 支持读取远程DB、支持优先级的设置、服务器集群等等等等。
3、总结
Quartz 支持的功能很多,用起来比较灵活,修改配置也很方便,并且 spring 对其也有支持,提供把 Quartz 整合在项目中。因为时间比较仓促,抽出了两天的时候才看 Quartz,所以了解的还是比较简单的,如果有什么问题或者错误还希望大家指出来,以便共同探讨,及时修改。
1、Quartz 简介
a、Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。
b、主页:http://www.quartz-scheduler.org/
c、目前最近版本:Quartz 1.8.0 Released - 04/22/2010
2、笔记记录:
a、构建一个简单的 Quartz 程序
MySimpleExample.java
package com.sc.quartz.myexamples; import java.util.Date; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.SimpleTrigger; import org.quartz.TriggerUtils; import org.quartz.impl.StdSchedulerFactory; public class MySimpleExample { public void run() throws SchedulerException{ // 创建调度者工厂 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); // 用工厂创建一个调度者 Scheduler scheduler = schedulerFactory.getScheduler(); // 利用 Quartz 提供的 getNextGivenSecondDate 返回一个当前时间四舍五入的 5 的倍数时间 long ts = TriggerUtils.getNextGivenSecondDate(null, 5).getTime(); // 创建一个工作,并命名为‘job1’,放入‘group1’组中,HellowWorl 是在此工作中需要执行的类 JobDetail jobDetail = new JobDetail("job1","group1",HelloWorld.class); // 创建一个触发器,并命名为‘trigger1’,将此触发器设置在 ‘job1’ 上 ,并设置什么情况下启动 SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1","job1", new Date(ts), null, -1, 1000L); // 将 ‘job1’ 加入调度者中, scheduler.scheduleJob(jobDetail, simpleTrigger); // 开始运行调度程序 scheduler.start(); // 停止调度程序 // scheduler.shutdown(true); } public static void main(String[] args) throws SchedulerException { MySimpleExample example = new MySimpleExample(); example.run(); } }
HellowWorld.java
package com.sc.quartz.myexamples; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class HelloWorld implements Job { public void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println("Hello World..."); } }
这里说下HellowWord类,此类实现了 Job 接口,重写了 Job 接口中的 execute 方法,当调度程序开始运行后,系统会自动调用 HelloWorld 的 execute 方法,也就相当于 TimerTask类中的 run 方法。
b、Quartz 支持同时运行多个 Job,他会根据 quartz.properties 初始化相应的线程
c、Quartz 支持两种触发器,分别是:SimpleTrigger 和 CronTrigger,SimpleTrigger 适合一些简单的设置,例如:从什么时候开始,到什么时候,每间隔多少时间执行一次,一共执行多少次;如果你要实现一些比较复杂定时功能,就必须用 CronTrigger 类,他支持 Unix 的语言(Unix我也不熟)“0/20 * * * * ?”。
// 表达式:从当前开始,没20秒执行一次,‘秒’ CronTrigger trigger = new CronTrigger("trigger1", "group1", "job1", "group1", "0/20 * * * * ?");
d、Quartz 中参数的设置
Quartz 中的 JobDataMap 类,提供参数的存储,此类相当于 HaspMap 类,以键/值的方式存储数据,可以通过 JobExecutionContext 上下问类来获取 JobDataMap 的实例。
// 获取上下文,并取出‘FAVORITE_COLOR’键对应的值 JobDataMap data = context.getJobDetail().getJobDataMap(); String favoriteColor = data.getString(FAVORITE_COLOR); // 为 ‘FAVORITE_COLOR’重新赋值 data.put(EXECUTION_COUNT, count);
e、Quartz 可以设置打火策略
trigger.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT);
f、Quartz 可以设置运行失败后就行的操作
// 报错后立即重新运行 e2.setRefireImmediately(true); // 报错后停止运行 e2.setUnscheduleAllTriggers(true);
g、Quartz 跳过特殊日期
Quartz 支持在规定好的时间内将写特定时间跳过
// Add the holiday calendar to the schedule // 创建假期日期 AnnualCalendar holidays = new AnnualCalendar(); // halloween (Oct 31) Calendar halloween = new GregorianCalendar(2005, 9, 31); // 设置跳过这一天 holidays.setDayExcluded(halloween, true); // 将此 holidays 告知调度者 sched.addCalendar("holidays", holidays, false, false);
h、Quartz 监听器
Quartz 支持监听器功能,目前可以监听三种状态:jobExecutionVetoed(Job执行被拒接)、jobToBeExecuted(job执行之前)、jobWasExecuted(job)执行之后。如果你想监听这些状态并想作出行为的话,需要实现 Quartz 提供的 JobListener 接口,并实现相应的方法,在其中写你要执行的程序
i、Quartz 支持插件功能
Quartz 可以通过读取xml来设置相应的参数,这样你就可以通过修改xml来修改相应的参数
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.fileNames = quartz_data.xml org.quartz.plugin.jobInitializer.failOnFileNotFound = true org.quartz.plugin.jobInitializer.scanInterval = 120 org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
j、其他
Quartz 支持读取远程DB、支持优先级的设置、服务器集群等等等等。
3、总结
Quartz 支持的功能很多,用起来比较灵活,修改配置也很方便,并且 spring 对其也有支持,提供把 Quartz 整合在项目中。因为时间比较仓促,抽出了两天的时候才看 Quartz,所以了解的还是比较简单的,如果有什么问题或者错误还希望大家指出来,以便共同探讨,及时修改。
Timer无论何时都不要用
简单的定时任务没有必要用quartz
ScheduledExecutorService能够搞定一切
以前一直用的Timer后来才发现的Quartz,抽空看了下,发现用起来很方便,功能很强大,所以决定以后就用这个了!
1 楼
beneo
2010-05-26
xiaoyuqi00 写道
因为下个项目需要用到定时器,以前写定时器用的是 Timer类,都是一些比较简单的 Task ,这次的后台 Task 比较多,并且业务也相对复杂,所有再看需求 的同时,自己了看了下Quartz,先将学习笔记总结如下:
1、Quartz 简介
a、Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。
b、主页:http://www.quartz-scheduler.org/
c、目前最近版本:Quartz 1.8.0 Released - 04/22/2010
2、笔记记录:
a、构建一个简单的 Quartz 程序
MySimpleExample.java
HellowWorld.java
这里说下HellowWord类,此类实现了 Job 接口,重写了 Job 接口中的 execute 方法,当调度程序开始运行后,系统会自动调用 HelloWorld 的 execute 方法,也就相当于 TimerTask类中的 run 方法。
b、Quartz 支持同时运行多个 Job,他会根据 quartz.properties 初始化相应的线程
c、Quartz 支持两种触发器,分别是:SimpleTrigger 和 CronTrigger,SimpleTrigger 适合一些简单的设置,例如:从什么时候开始,到什么时候,每间隔多少时间执行一次,一共执行多少次;如果你要实现一些比较复杂定时功能,就必须用 CronTrigger 类,他支持 Unix 的语言(Unix我也不熟)“0/20 * * * * ?”。
d、Quartz 中参数的设置
Quartz 中的 JobDataMap 类,提供参数的存储,此类相当于 HaspMap 类,以键/值的方式存储数据,可以通过 JobExecutionContext 上下问类来获取 JobDataMap 的实例。
e、Quartz 可以设置打火策略
f、Quartz 可以设置运行失败后就行的操作
g、Quartz 跳过特殊日期
Quartz 支持在规定好的时间内将写特定时间跳过
h、Quartz 监听器
Quartz 支持监听器功能,目前可以监听三种状态:jobExecutionVetoed(Job执行被拒接)、jobToBeExecuted(job执行之前)、jobWasExecuted(job)执行之后。如果你想监听这些状态并想作出行为的话,需要实现 Quartz 提供的 JobListener 接口,并实现相应的方法,在其中写你要执行的程序
i、Quartz 支持插件功能
Quartz 可以通过读取xml来设置相应的参数,这样你就可以通过修改xml来修改相应的参数
j、其他
Quartz 支持读取远程DB、支持优先级的设置、服务器集群等等等等。
3、总结
Quartz 支持的功能很多,用起来比较灵活,修改配置也很方便,并且 spring 对其也有支持,提供把 Quartz 整合在项目中。因为时间比较仓促,抽出了两天的时候才看 Quartz,所以了解的还是比较简单的,如果有什么问题或者错误还希望大家指出来,以便共同探讨,及时修改。
1、Quartz 简介
a、Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。
b、主页:http://www.quartz-scheduler.org/
c、目前最近版本:Quartz 1.8.0 Released - 04/22/2010
2、笔记记录:
a、构建一个简单的 Quartz 程序
MySimpleExample.java
package com.sc.quartz.myexamples; import java.util.Date; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.SchedulerFactory; import org.quartz.SimpleTrigger; import org.quartz.TriggerUtils; import org.quartz.impl.StdSchedulerFactory; public class MySimpleExample { public void run() throws SchedulerException{ // 创建调度者工厂 SchedulerFactory schedulerFactory = new StdSchedulerFactory(); // 用工厂创建一个调度者 Scheduler scheduler = schedulerFactory.getScheduler(); // 利用 Quartz 提供的 getNextGivenSecondDate 返回一个当前时间四舍五入的 5 的倍数时间 long ts = TriggerUtils.getNextGivenSecondDate(null, 5).getTime(); // 创建一个工作,并命名为‘job1’,放入‘group1’组中,HellowWorl 是在此工作中需要执行的类 JobDetail jobDetail = new JobDetail("job1","group1",HelloWorld.class); // 创建一个触发器,并命名为‘trigger1’,将此触发器设置在 ‘job1’ 上 ,并设置什么情况下启动 SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1","job1", new Date(ts), null, -1, 1000L); // 将 ‘job1’ 加入调度者中, scheduler.scheduleJob(jobDetail, simpleTrigger); // 开始运行调度程序 scheduler.start(); // 停止调度程序 // scheduler.shutdown(true); } public static void main(String[] args) throws SchedulerException { MySimpleExample example = new MySimpleExample(); example.run(); } }
HellowWorld.java
package com.sc.quartz.myexamples; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class HelloWorld implements Job { public void execute(JobExecutionContext arg0) throws JobExecutionException { System.out.println("Hello World..."); } }
这里说下HellowWord类,此类实现了 Job 接口,重写了 Job 接口中的 execute 方法,当调度程序开始运行后,系统会自动调用 HelloWorld 的 execute 方法,也就相当于 TimerTask类中的 run 方法。
b、Quartz 支持同时运行多个 Job,他会根据 quartz.properties 初始化相应的线程
c、Quartz 支持两种触发器,分别是:SimpleTrigger 和 CronTrigger,SimpleTrigger 适合一些简单的设置,例如:从什么时候开始,到什么时候,每间隔多少时间执行一次,一共执行多少次;如果你要实现一些比较复杂定时功能,就必须用 CronTrigger 类,他支持 Unix 的语言(Unix我也不熟)“0/20 * * * * ?”。
// 表达式:从当前开始,没20秒执行一次,‘秒’ CronTrigger trigger = new CronTrigger("trigger1", "group1", "job1", "group1", "0/20 * * * * ?");
d、Quartz 中参数的设置
Quartz 中的 JobDataMap 类,提供参数的存储,此类相当于 HaspMap 类,以键/值的方式存储数据,可以通过 JobExecutionContext 上下问类来获取 JobDataMap 的实例。
// 获取上下文,并取出‘FAVORITE_COLOR’键对应的值 JobDataMap data = context.getJobDetail().getJobDataMap(); String favoriteColor = data.getString(FAVORITE_COLOR); // 为 ‘FAVORITE_COLOR’重新赋值 data.put(EXECUTION_COUNT, count);
e、Quartz 可以设置打火策略
trigger.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT);
f、Quartz 可以设置运行失败后就行的操作
// 报错后立即重新运行 e2.setRefireImmediately(true); // 报错后停止运行 e2.setUnscheduleAllTriggers(true);
g、Quartz 跳过特殊日期
Quartz 支持在规定好的时间内将写特定时间跳过
// Add the holiday calendar to the schedule // 创建假期日期 AnnualCalendar holidays = new AnnualCalendar(); // halloween (Oct 31) Calendar halloween = new GregorianCalendar(2005, 9, 31); // 设置跳过这一天 holidays.setDayExcluded(halloween, true); // 将此 holidays 告知调度者 sched.addCalendar("holidays", holidays, false, false);
h、Quartz 监听器
Quartz 支持监听器功能,目前可以监听三种状态:jobExecutionVetoed(Job执行被拒接)、jobToBeExecuted(job执行之前)、jobWasExecuted(job)执行之后。如果你想监听这些状态并想作出行为的话,需要实现 Quartz 提供的 JobListener 接口,并实现相应的方法,在其中写你要执行的程序
i、Quartz 支持插件功能
Quartz 可以通过读取xml来设置相应的参数,这样你就可以通过修改xml来修改相应的参数
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin org.quartz.plugin.jobInitializer.fileNames = quartz_data.xml org.quartz.plugin.jobInitializer.failOnFileNotFound = true org.quartz.plugin.jobInitializer.scanInterval = 120 org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
j、其他
Quartz 支持读取远程DB、支持优先级的设置、服务器集群等等等等。
3、总结
Quartz 支持的功能很多,用起来比较灵活,修改配置也很方便,并且 spring 对其也有支持,提供把 Quartz 整合在项目中。因为时间比较仓促,抽出了两天的时候才看 Quartz,所以了解的还是比较简单的,如果有什么问题或者错误还希望大家指出来,以便共同探讨,及时修改。
Timer无论何时都不要用
简单的定时任务没有必要用quartz
ScheduledExecutorService能够搞定一切
相关推荐
这个学习笔记将深入探讨Quartz的核心概念、主要功能以及如何在实际项目中使用它。 首先,我们要理解Quartz的基本架构。Quartz的核心组件包括Scheduler、Job、Trigger和Calendar。Scheduler是调度器,负责管理所有的...
Quartz 是一个强大的任务调度框架,由 OpenSymphony 开源组织开发,主要目的是提供一个用于在 Java 应用程序中安排任务执行的解决方案。Quartz 支持与 J2EE 和 J2SE 平台的无缝集成,允许开发者在各种类型的项目中...
本学习笔记主要围绕Quartz的使用,特别是如何利用corn表达式来设置定时任务。 Quartz的核心概念包括Job(任务)、Trigger(触发器)和Scheduler(调度器)。Job是你要执行的实际业务逻辑,Trigger定义了Job何时被...
Quartz是一款开源的作业调度框架,它允许开发者创建和管理定时任务,以便在特定时间执行。在Java世界中,Quartz被广泛应用于...通过实践和学习,你将能够熟练掌握Quartz的使用,为你的项目带来更高效的自动化处理能力。
刘冬编写Spring.NET学习笔记25——整合Quartz.NET例子。 原文: http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_QuartzNet.html
六、Quartz学习资源 本教程、学习手册和帮助手册将详细阐述Quartz的各个方面,从基本使用到高级特性的实践,帮助开发者从初学者到精通者。通过阅读这些资料,你可以掌握如何在项目中有效地使用Quartz,提升系统的...
NULL 博文链接:https://jaykuen.iteye.com/blog/911106
Spring Boot 是一个基于 Spring 框架的快速开发...这个完整的 Spring Boot 学习笔记涵盖了从基础到进阶的各个方面,通过学习和实践,你可以掌握 Spring Boot 开发的核心技能,从而高效地构建高质量的 Java 后端应用。
【学习笔记 MHT2】是一份综合性的IT学习资料,主要涵盖了JavaScript编程、软件开发工具、Web服务器技术、编码解码方法以及设计模式等多个领域的知识。以下是对这些知识点的详细阐述: 1. **JavaScript经典技巧**:...
标题中的“spring2.0学习笔记+spring定时任务”表明了这个压缩包文件包含的是关于Spring框架2.0版本的学习资料,特别是关于Spring的定时任务功能。Spring是Java开发中最广泛应用的轻量级框架之一,它提供了一整套...
学习笔记中可能包含了一些关于Objective-C图形编程的内容,如Core Graphics或Quartz 2D,它们是苹果平台进行低级绘图的API,可用于创建自定义视图和复杂的图形。 六、实践应用 理论学习后,通过编写简单的iOS应用...
这个“spring学习笔记”包含了与Spring框架相关的源代码和项目实践,旨在帮助学习者深入理解并掌握Spring的核心概念和技术。 首先,Spring的核心特性之一是依赖注入(Dependency Injection, DI),它允许开发者通过...
这个“Spring学习笔记(内含代码)”包含了作者在深入研究Spring框架过程中所做的详细记录,旨在帮助初学者和有经验的开发者更好地理解和应用Spring。 Spring框架的核心特性包括依赖注入(Dependency Injection,DI...
SpringBoot学习笔记完整教程 SpringBoot是Spring框架的一个简化版,旨在简化Spring应用程序的初始设置和开发过程。它集成了大量的常用库,如数据访问、安全、Web等,使得开发者可以快速构建健壮的微服务应用。本...
DirectShow(SDK)是微软提供的一套用于Windows平台上的流媒体处理工具,它与DirectX一同发布。这个SDK主要用于多媒体数据的捕获、处理和回放,支持多种媒体格式,如Asf、Mpeg、Avi、Dv、Mp3、Wave等。DirectShow...
Quartz则是一个强大的开源作业调度库,用于在Java应用中执行定时任务。本资源结合了Spring Boot与Quartz,提供了在Spring Boot环境中实现多任务调度的解决方案。 首先,我们需要了解Spring Boot的核心特性。Spring ...