Java Spring中Quartz調度器詳解及實例。本站提示廣大學習愛好者:(Java Spring中Quartz調度器詳解及實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java Spring中Quartz調度器詳解及實例正文
一、Quartz的特點
* 按作業類的繼承方式來分,主要有以下兩種:
1.作業類繼承org.springframework.scheduling.quartz.QuartzJobBean類的方式
2.作業類不繼承org.springframework.scheduling.quartz.QuartzJobBean類的方式
注:個人比較推崇第二種,因為這種方式下的作業類仍然是POJO。
* 按任務調度的觸發時機來分,主要有以下兩種:
1.每隔指定時間則觸發一次,對應的調度器為org.springframework.scheduling.quartz.SimpleTriggerBean
2.每到指定時間則觸發一次,對應的調度器為org.springframework.scheduling.quartz.CronTriggerBean
注:這兩種觸發方式均可以跟兩種作業繼承方式相互組合來使用。
下面簡單演示一下在spring對Quartz的用法。
二、作業類繼承org.springframework.scheduling.quartz.QuartzJobBean類,每到指定時間則觸發一次
1.編寫作業類
package bean.jobDetailBean; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class Job1 extends QuartzJobBean { private int timeout; private static int i = 0; //調度工廠實例化後,經過timeout時間開始執行調度 public void setTimeout(int timeout) { this.timeout = timeout; } /** * 要調度的具體任務 */ @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { System.out.println("繼承QuartzJobBean的方式-調度" + ++i + "進行中..."); } }
2.配置作業類
<!-- 作業使用繼承QuartzJobBean的方式 --> <bean name="job1" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="bean.jobDetailBean.Job1" /> <property name="jobDataAsMap"> <map> <entry key="timeout" value="0" /> </map> </property> </bean>
3.配置作業調度的觸發方式
<!-- 對應於作業繼QuartzJobBean類的方式 --> <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="job1" /> <!-- "cronExpression"的配置說明 字段 允許值 允許的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小時 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - * ? / L C # 年(可選) 留空, 1970-2099 , - * / - 區間 * 通配符 ? 你不想設置那個字段 --> <!-- 每分鐘的第0,10,20,30,40,50秒調度一次 --> <property name="cronExpression" value="0,10,20,30,40,50 * * * * ?" /> </bean>
4.配置調度工廠
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="cronTrigger" /> </list> </property> </bean>
5.開啟調度
package test; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ScheduleTest { public static void main(String[] args){ <span > </span>BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext*.xml"); } }
三、作業類不繼承org.springframework.scheduling.quartz.QuartzJobBean類,每隔指定時間則觸發一次
1.編寫作業類
package bean.jobDetailBean; public class Job2 { private static int i = 0; public void doJob2() { System.out.println("不繼承QuartzJobBean方式-調度" + ++i + "進行中..."); } }
2.配置作業類
<bean id="job2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <bean class="bean.jobDetailBean.Job2" /> </property> <property name="targetMethod" value="doJob2" /> <property name="concurrent" value="false" /><!-- 作業不並發調度 --> </bean>
3.配置作業調度的觸發方式
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="job2" /> <property name="startDelay" value="0" /><!-- 調度工廠實例化後,經過0秒開始執行調度 --> <property name="repeatInterval" value="2000" /><!-- 每2秒調度一次 --> </bean>
4.配置調度工廠
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="simpleTrigger" /> </list> </property> </bean>
5.開啟調度
package test; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; public class ScheduleTest { public static void main(String[] args){ BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext*.xml"); } }
簡單說明spring自帶調度器的例子。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!