1.Quartz 是一个开源的作业调度框架 ,spring 支持集成Quartz
2.Quartz 作业调度的实现 1.创建作业job(两种方式:1.新建一个java类继承 Quartz 的 QuartzJobBean. 2.新建一个普通的java类) 2.创建触发器trigger(Quartz提供两种触发器 simpleTrigger 和 cronTrigger simpleTrigger 可以设置开始时间,重复时间和重复次数 cronTrigger 支持 cron表达式,使用更加灵活) 3.需要一个调度器scheduler(见配置applicationContext.xml中的schedulerFactoryBean, 将触发器注册到调度器) 3.关于 cron表达式 (cronExpression),表示什么时候触发 trigger 可以参考 http://www.blogjava.net/allen-zhe/archive/2007/01/09/92668.html 特殊字符: 1.反斜线(/)字符表示增量值。例如,在秒字段中“5/15”代表从第 5 秒开始,每 15 秒一次。 2.问号(?)字符和字母(L) 字符只有在月内日期和周内日期字段中可用。问号表示这个字段不包含具体值。 所以,如果指定月内日期,可以在周内日期字段中插入“?”,表示周内日期值无关紧要。字母 L 字符是 last 的缩写。 放在月内日期字段中,表示安排在当月最后一天执行。在周内日期字段中,如果“L”单独存在,就等于“7”, 否则代表当月内周内日期的最后一个实例。所以“0L”表示安排在当月的最后一个星期日执行。 3.在月内日期字段中的字母(W)字符把执行安排在最靠近指定值的工作日。把“1W”放在月内日期字段中, 表示把执行安排在当月的第一个工作日内。 4. 井号(#)字符为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。 5.星号(*)字符是通配字符,表示该字段可以接受任何可能的值。 实例1: 秒 分 时 日(月内日期) 月 星期 (周内日期) 年 0 0 6 ? * 6#3 ? //表示每个月的第三个星期五的上午6:00:00执行 解释: 秒(0)分(0)时(6) ,表示6:00:00; 日【月内日期】(?),表示的是每个月没有规定是哪一天,月规定的时间在(周内日期)规定的; 月(*),表示月可以接受任何字段的值,即每种表达式,扩展到月时均支持。(比如:该例,表示每个月都执行【时(6)日(?)星期(6#3)年(?)】表达式,该例总共有三个表达式) 星期 【周内日】(6#3),6:表示的是一个星期的第六天,星期天为第一天;#:表示给月份指定具体的工作实例;3:表示每个月的第三个星期。 年(?):没有表示具体那一年,通过?号表示每一年都执行。