springquartz实现定时任务的配置方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Spring+Quartz实现定时任务的配置方法
第一步:.导入相关的jar包
(1)spring.jar
(2)quartz-1.6.0.jar
(3)相关包
commons-collections-3.2.jar ; commons-logging-1.1.1.jar; log4j-1.2.16.jar
第二步:创建一个类来定义工作
定义Quartz工作的第一步是创建一个类来定义工作。要做到这一点,你需要从Spring 的QuartzJobBean中派生子类。
第三步:配置JobDetail
值得注意的是,在这里你并没有直接声明一个TopTenTask Bean,而是声明了一个JobDetailBean。这是使用Quartz时的一个特点。
JobDetailBean是Quartz的org.quartz.JobDetail的子类,它要求通过jobClass属性来设置一个Job对象。
使用Quartz的JobDetail中的另一个特别之处是TopTenTask的timeout属性是间接设置的。JobDetail的jobDataAsMap属性接受一个java.util.Map,其中包含了需要设置给jobClass的各种属性。
在这里,这个map包含了一个键值为timeout。当JobDetailBean实例化时,它会将5注入到EmailReportJob的timeout属性中。
第四步:配置Trigger
工作已经被定义好了,接下来你需要调度这个工作。
Quartz的org.quartz.Trigger类描述了何时及以怎样的频度运行一个Quartz工作。
Spring提供了两个触发器,SimpleTriggerBean和CronTriggerBean。
SimpleTriggerBean与ScheduledTimerTask类似。你可以用它来指定一个工作应该以怎样的频度运行,以及(可选地)在第一次运行工作之前应该等待多久。
例如,要调度报表工作每24小时运行一次,第一次在1小时之后开始运行,可以按照以下方式进行声明:
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
属性jobDetail装配了将要被调度的工作,在这个例子中是topTenTask Bean。属性repeatInterval告诉触发器以怎样的频度运行这个工作(以毫秒作为单位)。这里,我们
设置它为86400000,因此每隔24小时它会被触发一次。你也可以选择设置startDelay 属性来延迟工作的第一次执行。我们设置它为3600000,因此在第一次触发之前它会等待1小时。
CronTriggerBean允许你更精确地控制任务的运行时间。
和SimpleTriggerBean一样,jobDetail属性告诉触发器调度哪个工作。这里我们又一次装配了一个topTenTask Bean。属性cronExpression告诉触发器何时触发。属性cronExpression告诉触发器何时触发。如果你不熟悉cron,这个属性可能看上去有点神秘,因此让我们进一步考察一下这个属性。
字段允许值允许的特殊字符
秒0-59, - * /
分0-59, - * /
小时0-23, - * /
日0-31, - * ? / L W C
月1-12 或者JAN-DEC , - * /
周几1-7 或者SUN-SAT, - * ? / L C #
年(可选字段)留空, 1970-2099, - * /
(1)
(2)“-”字符:指定一个值的范围
(3)“*”字符可以用于所有字段,在“分”字段中设为"*"表示"每一分钟"的含义。
(4)“/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m
(5)“?”字符:表示不确定的值
(6)“L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X
(7)“W”字符:指定离给定日期最近的工作日(周一到周五)
(8)“C”字符可用于“日”和“周几”字段,它是"calendar"的缩写。它表示为基于相关
的日历所计算出的值(如果有的话)。如果没有关联的日历, 那它等同于包含全部日历。
“日”字段值为"5C"表示"日历中的第一天或者5号以后",“周几”字段值为"1C"则表示"日历中的第一天或者周日以后"。
(9)“#”字符:表示该月第几个周X。6#3表示该月第3个周五
cronExpression表达式的示例:
"0 0 12 * * ?" 每天中午12点触发
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
"0 15 10 15 * ?" 每月15日上午10:15触发