javascript
使用Spring3+Quartz实现定时任务
在本文中,我們使用Spring3+Quartz實現定時任務。spring中定義了一些接口來支持Quartz,可以使你的業務邏輯類和Quartz解耦。
這個例子中使用了如下maven的依賴項:
<dependencies><!--?Spring?3?dependencies?--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>3.1.2.RELEASE</version></dependency><!--?QuartzJobBean?in?spring-context-support.jar?--><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>3.1.2.RELEASE</version></dependency><!--?Spring?+?Quartz?need?transaction?--><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>3.1.2.RELEASE</version></dependency><!--?Quartz?framework?--><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>1.8.6</version></dependency></dependencies>添加依賴之后需要創建一個java類,該類完成要執行的定時任務。
File : RunMeTask.java
package?com.mkyong.common;public?class?RunMeTask?{public?void?printMe()?{System.out.println("Spring?3?+?Quartz?1.8.6?~");}}有了要執行的任務,我們需要聲明Quartz Scheduler job。
使用spring有兩種方法來聲明Quartz的job
方法一是使用MethodInvokingJobDetailFactoryBean類
<bean?id="runMeJob"?class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"><property?name="targetObject"?ref="runMeTask"?/><property?name="targetMethod"?value="printMe"?/></bean>方法二是從org.springframework.scheduling.quartz.QuartzJobBean類繼承,如下RumMeJob類實現
File : RunMeJob.java
package?com.mkyong.common;import?org.quartz.JobExecutionContext;import?org.quartz.JobExecutionException;import?org.springframework.scheduling.quartz.QuartzJobBean;public?class?RunMeJob?extends?QuartzJobBean?{private?RunMeTask?runMeTask;public?void?setRunMeTask(RunMeTask?runMeTask)?{this.runMeTask?=?runMeTask;}protected?void?executeInternal(JobExecutionContext?context)throws?JobExecutionException?{runMeTask.printMe();}}Configure the target class via jobClass and method to run via jobDataAsMap.
<bean?name="runMeJob"?class="org.springframework.scheduling.quartz.JobDetailBean"><property?name="jobClass"?value="com.mkyong.common.RunMeJob"?/><property?name="jobDataAsMap"><map><entry?key="runMeTask"?value-ref="runMeTask"?/></map></property></bean>配置Quartz觸發器來定義執行調度任務的時機。支持兩種類型的觸發器。
一種是SimpleTrigger,你可以指定任務的開始時間,結束時間以及重復的間隔。
????????<!--?Simple?Trigger,?run?every?5?seconds?--><bean?id="simpleTrigger"?class="org.springframework.scheduling.quartz.SimpleTriggerBean"><property?name="jobDetail"?ref="runMeJob"?/><property?name="repeatInterval"?value="5000"?/><property?name="startDelay"?value="1000"?/></bean>另一種是CronTrigger,這種方式類似于linux的crontab的語法
????<bean?id="cronTrigger"class="org.springframework.scheduling.quartz.CronTriggerBean"><property?name="jobDetail"?ref="runMeJob"?/><property?name="cronExpression"?value="0/5?*?*?*?*??"?/></bean>linux的crontab表達式是非常強大的,你可以參考下面兩篇文章 http://en.wikipedia.org/wiki/CRON_expression http://www.quartz-scheduler.org/docs/examples/Example3.html
最后一步需要創建SchedulerFactoryBean來定義執行的任務,和任務的觸發時機。
???<bean?class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property?name="jobDetails"><list><ref?bean="runMeJob"?/></list></property><property?name="triggers"><list><ref?bean="simpleTrigger"?/></list></property></bean>完整的Spring配置文件如下
<beans?xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.0.xsd"><bean?id="runMeTask"?class="com.mkyong.common.RunMeTask"?/><!--?Spring?Quartz?--><bean?name="runMeJob"?class="org.springframework.scheduling.quartz.JobDetailBean"><property?name="jobClass"?value="com.mkyong.common.RunMeJob"?/><property?name="jobDataAsMap"><map><entry?key="runMeTask"?value-ref="runMeTask"?/></map></property></bean><!--?<bean?id="runMeJob"?class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">?<property?name="targetObject"?ref="runMeTask"?/>?<property?name="targetMethod"?value="printMe"?/>?</bean>?--><!--?Simple?Trigger,?run?every?5?seconds?--><bean?id="simpleTrigger"?class="org.springframework.scheduling.quartz.SimpleTriggerBean"><property?name="jobDetail"?ref="runMeJob"?/><property?name="repeatInterval"?value="5000"?/><property?name="startDelay"?value="1000"?/></bean><!--?Cron?Trigger,?run?every?5?seconds?--><bean?id="cronTrigger"?class="org.springframework.scheduling.quartz.CronTriggerBean"><property?name="jobDetail"?ref="runMeJob"?/><property?name="cronExpression"?value="0/5?*?*?*?*??"?/></bean><bean?class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property?name="jobDetails"><list><ref?bean="runMeJob"?/></list></property><property?name="triggers"><list><ref?bean="simpleTrigger"?/></list></property></bean></beans>你可以通過下面的類來運行示例:
package?com.mkyong.common;import?org.springframework.context.support.ClassPathXmlApplicationContext;public?class?App?{public?static?void?main(?String[]?args?)?throws?Exception{new?ClassPathXmlApplicationContext("Spring-Quartz.xml");}}控制臺輸出內容類似:
Jul?25,?2012?3:23:09?PM?org.springframework.scheduling.quartz.SchedulerFactoryBean?startScheduler INFO:?Starting?Quartz?Scheduler?nowSpring?3?+?Quartz?1.8.6?~?//run?every?5?secondsSpring?3?+?Quartz?1.8.6?~轉載于:https://my.oschina.net/liangzhenghui/blog/192090
總結
以上是生活随笔為你收集整理的使用Spring3+Quartz实现定时任务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: easyUI tabs 显示与隐藏 ta
- 下一篇: js javascript js控制分页