总结Quartz使用示例总结
2023-05-22
在目前的JAVA应用中,任务调度应用非常广泛,因此掌握QUARTZ是必要的技能。
少说闲话,上官网:http://www.quartz-scheduler.org/下载最新1.80资源包
commons-logging log4j sff4j 等待jar包要加入,quartz的jar包肯定是必须的。
先写一个类来实现Job接口。
代码Java
1. public class QuartzDemo implements Job{
2.
3. @Override
4. public void execute(JobExecutionContext arg0) throws JobExecutionException {
5. System.out.println("执行我...");
6.
7. }
8.
9. }
然后写上各种各样的测试案例
代码Java
1. public class Test {
2. private static final SimpleTrigger CronTrigger = null;
3.
4. public static void main(String[] args){
5. }
6.
7. public void 特别1(){
8. ///通过SchedulerFactory获得调度器
9. SchedulerFactory schedulerFactory = new StdSchedulerFactory();
10. Scheduler scheduler;
11. try {
12. scheduler = schedulerFactory.getScheduler();
13.
14.
15.
16.
17. //引入操作程序
18. JobDetail jobDetail =
19. new JobDetail("jobDetail-s1", "jobDetailGroup-s1", QuartzDemo.class);
20.
21. ///new触发器
22. SimpleTrigger simpleTrigger =
23. new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
24.
25.
26. ///设定工作启动时间
27.
28. long ctime = System.currentTimeMillis();
29. simpleTrigger.setStartTime(new Date(ctime));
30.
31.
32. ///设置工作执行间隔。
33. simpleTrigger.setRepeatInterval(1000);
34.
35. ///设定工作执行频次。
36. simpleTrigger.setRepeatCount(10);
37.
38. //默认情况下设置工作执行优先
39. //simpleTrigger.setPriority(10);
40.
41.
42. 在调度器中设置操作和触发器
43. scheduler.scheduleJob(jobDetail, simpleTrigger);
44.
45. //启动调度器
46. scheduler.start();
47. } catch (SchedulerException e) {
48. // TODO Auto-generated catch block
49. e.printStackTrace();
50. }
51. }
52.
53. public void test2(){
54.
55. try {
56. SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
57. Scheduler sched = schedFact.getScheduler();
58. sched.start();
59. JobDetail jobDetail = new JobDetail( " Income Report " ,
60. " Report Generation " , QuartzDemo.class );
61. jobDetail.getJobDataMap().put( " type " , " FULL " );
62. CronTrigger trigger = new CronTrigger( " Income Report " ,
63. " Report Generation " );
64.
65. trigger.setCronexpression_r( "0 33 16 * * ?" );
66. sched.scheduleJob(jobDetail, trigger);
67. } catch (Exception e) {
68. e.printStackTrace();
69. }
70. }
71.
72. public void test3(){
73. ///通过SchedulerFactory获得调度器
74. SchedulerFactory schedulerFactory = new StdSchedulerFactory();
75. Scheduler scheduler;
76. try {
77. scheduler = schedulerFactory.getScheduler();
78. //引入操作程序
79. JobDetail jobDetail =
80. new JobDetail("jobDetail-s1", "jobDetailGroup-s1", QuartzDemo.class);
81. ///new触发器
82. CronTrigger simpleTrigger =
83. new CronTrigger("trigger", "group", "job", "group", "16 26/1 8-17 * * ?");
84. // new SimpleTrigger("simpleTrigger", "triggerGroup-s1");
85.
86.
87. ///设定工作启动时间
88. //Calendar excelCal = Calendar.getInstance();
89. //excelCal.add(Calendar.DAY_OF_MONTH, 1);
90. ///excelCal.set(Calendar.HOUR_OF_DAY, 16);
91. //excelCal.set(Calendar.SECOND, 0);
92. //excelCal.add(Calendar.MINUTE, 9);
93. // long ctime = System.currentTimeMillis();
94. // simpleTrigger.setStartTime(excelCal.getTime());
95. ///设置工作执行间隔。
96. // simpleTrigger.setRepeatInterval(1000);
97. ///设定工作执行频次。
98. // simpleTrigger.setRepeatCount(10);
99. //默认情况下设置工作执行优先
100. //simpleTrigger.setPriority(10);
101.
102. 在调度器中设置操作和触发器
103. scheduler.scheduleJob(jobDetail, simpleTrigger);
104.
105. //启动调度器
106. scheduler.start();
107. } catch (SchedulerException e) {
108. // TODO Auto-generated catch block
109. e.printStackTrace();
110. } catch (ParseException e) {
111. // TODO Auto-generated catch block
112. e.printStackTrace();
113. }
114.
115.
116. }
117.
118. }
需要注意的几点是,org经常出现。.quartz.core.ErrorLogger : An error occured instantiating job to be executed...这一异常,解决办法是
代码Java
1. 1)Job类必须有默认的无参构造方法,当然不能覆盖,类本来就是无参构造方法。
2.
3. 2)Jobscope必须是Public类型,因为quartz是根据反射机制实例化类型,如果不是public类型,就不能暴露出来。
4.
5. 3) Job类不能属于内部类,原因同上,因此,尽量独立建类
1)Job类必须有默认的无参构造方法,当然不能覆盖,类本来就是无参构造方法。 2)Jobscope必须是Public类型,因为quartz是根据反射机制实例化类型,如果不是public类型,就不能暴露出来。 3) Job类不能是内部类,原因同上,因此尽量独立建类。
之后加上我在网上收集的。
代码Java
1. 环境变量Quartz:quartz.properties
2. Configure Main Scheduler Properties
3. = TestScheduler
4. = one
5. Configure ThreadPool
6. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
7. = 5
8. = 4
9. Configure JobStore
10. = 5000
11. org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
12.
13.
14. 附件:cronExpression配备表明
15.
16. 允许值 特殊的许可符号
17. 0-59 , - * /
18. 0-59 , - * /
19. 0-23 , - * /
20. 1-31 , - * ? / L W C
21. 1-12 或是 JAN-DEC , - * /
22. 1-7 或是 SUN-SAT , - * ? / L C #
23. 留空, 1970-2099 , - * /
24.
25.
26. 意义
27. "0 0 12 * * ? / L C #
23. 留空, 1970-2099 , - * /
24.
25.
26. 意义
27. "0 0 12 * * ?" 每日中午12点触发
28. "0 15 10 ? * *" 每天早上10:15触发
29. "0 15 10 * * ?" 每天早上10:15触发
30. "0 15 10 * * ? *" 每天早上10:15触发
31. "0 15 10 * * ? 2005" 每天早上1005年:15触发
32. "0 * 14 * * ?" 从下午2点到下午2点:每1分钟触发59期间
33. "0 0/5 14 * * ?" 从下午2点到下午2点:每55分钟触发55期间
34. "0 0/5 14,18 * * ?" 每天下午2点到2点:从下午6点到6点,55期间:每55分钟触发55期间
35. "0 0-5 14 * * ?" 从下午2点到下午2点:每1分钟触发05期间
36. "0 10,44 14 ? 3 WED" 星期三,每年三月的下午?:10和2:44触发
37. "0 15 10 ? * MON-FRI" 从星期一到星期五的早上10:15触发
38. "0 15 10 15 * ?" 每月15日早上10:15触发
39. "0 15 10 L * ?" 每个月的最后一天早上10:15触发
40. "0 15 10 ? * 6L" 每个月的最后一个星期五早上10:15触发
41. "0 15 10 ? * 6L 2002-2005" 从2002年到2005年的最后一个星期五上午:15触发
42. "0 15 10 ? * 6#3" 每个月的第三个星期五早上10:15触发
43.
44. 意义
45. 表示所有值;
46. 表示没有说明数值,也就是不要注意它的价值;
47. 表示指定范围;
48. 表示附加一个可能值;
49. 开始时间表示在符号之前,在符号之后,表示每次增加的值;
50. L("last") ("last") "L" 用于day-of-“month”字段的意思是 "这个月的最后一天";用于 day-of-week字段, 这是一个简单的意思 "7" or "SAT"。 如果是在day-of-在week字段中与数字联合使用,这意味着 "这个月的最后一周是什么" – 比如: "6L" means "这个月的最后一个星期五". 当我们用“L"不指出目录值或范围是非常重要的,否则,我们将得到一些意想不到的结果。51. W("weekday") 只有day才能使用-of-month字段。51. W("weekday") 只有day才能使用-of-month字段。用于描述最接近指定日(星期一至星期五)的工作日。例如:在day-of-month字段用“15W”指的是“最接近本月第15天工作日”,即如果本月第15天是星期六,则触发器将在本月第14天即星期五触发;如果本月第15天是星期天,则触发器将在本月第16天即星期一触发;如果本月第15天是星期二,那么触发器将在这一天触发。注:此用法仅在当前月份计算值,不会超过当前月份。“W"字符只能在day中使用-of-month指示一天,不能是一个范围或目录。也可以用“LW来指定这个月的最后一个工作日。52. 只有day才能使用-of-字段week。用于指定本月的第几个星期。例子:在day-of-本月第三个星期五(6指周五,3指第三个),week字段使用“6#3”。如指定日期不存在,触发器不会触发。53. 在联系calendar之后,计算了数值。例子:在day-of-month 使用“5C”字段是指本月第五天或之后包含calendar的第一天;day-of-“1C”字段是指在本周日或之后包含calendar的第一天使用week字段。
本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。
免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com