- 浏览: 24898 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
woshixushigang:
问下,如何重写自己的格式化信息 message="x ...
Spring中的用于格式化的annotation -
congenlv:
[code="java">引用[b] ...
Quartz学习笔记(一) -
congenlv:
JobDetailImpl jobDetail = new ...
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案例》的项目代码,包含jar包,只要导入即可运行。这是一个最基本的Quartz定时器HelloWorld版。
Quartz 学习笔记 Quartz特点 Quartz功能介绍
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表
quartz教程 quartz学习手册 quartz帮助手册
刘冬编写Spring.NET学习笔记25——整合Quartz.NET例子。 原文: http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_QuartzNet.html
博客中《quartz学习笔记二:一个基础的Quartz定时器案例》的项目代码,包含jar包,只要导入即可运行。这是一个最基本的Quartz定时器API版。
Quartz入门Demo,栗子全,注释详细。还有Spring结合的demo,一共两个Demo外加Quartz开发资料,绝对超值。欢迎大家共同交流。
NULL 博文链接:https://jaykuen.iteye.com/blog/911106
这是本人初步学习Quartz时候记录的一些笔记,只是Quartz的简单入门!
NULL 博文链接:https://403018322.iteye.com/blog/1613610
quartz的初步学习笔记,简单了解一下,是从网上听课的摘要,如果对各位有帮助是最好;希望大家一起学习,一起进步,共同成长,加油,兄弟们,姐妹们!!!
最近学习“黑马程序员”的“精品详解石英视频”教程,顺便将课程的笔记整理出来,发现网上根本搜不到视频的笔记资料,遂将此资料分享出来,若有侵权,请联系本人 教程 一,石英概念 Quartz是OpenSymphony开放式组织...
本项目为全栈工程师学习笔记,不求最深最好,开源技术搬运工 其他项目:Spring Cloud微服务学习笔记 Spring Boot项目实践 Java体系知识点汇总: : 网站资源链接 S3基本使用事件 数据库隔离等级验证 常用JVM命令...
本资源是在springboot下整合quartz实现多任务的代码,亲测可用
里面包括大量的学习方法,希望可以帮到你们,ActiveMQ,Beetl,BeetlSQL,Bootstrap,CentOS,quartz,RocketMQ,Zookeeper,Websocket,WangEditor
2020年Java基础教程(全资料+笔记+源码): 2020年javaweb全套教程: Mysql: Oracle: JDBC: C3P0: 前端技术 HTML、CSS、Javascript: jQuery-: Ajax: Vue: 微信小程序: 动态网页: 编程强化 JVM优化: 数据...
heavyz的Tomcat学习笔记(包括启动流程分析、启动脚本分析) ] () [ java8 新特性讲解系列文章 ] () [ Java 从Jar文件中动态加载类 ] () [ Java并发源码分析 - ThreadPoolExecutor ] () [ java ClassLoader 基本原理 ]...
本套项目实战课程有极高的含金量,采用当下最主流的微服务分布式架构,前后端分离技术,涵盖技术栈有:Vue、axios、Springboot、RESTful、mybatis、tkmapper、Swagger、任务调度Quartz/Elastic-Job、阿里云OSS、...