总结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