JavaSpring中Quartz調度器詳解及實例

一、Quartz的特點

站在用戶的角度思考問題,與客戶深入溝通,找到名山網(wǎng)站設計與名山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、虛擬主機、企業(yè)郵箱。業(yè)務覆蓋名山地區(qū)。

* 按作業(yè)類的繼承方式來分,主要有以下兩種:

1.作業(yè)類繼承org.springframework.scheduling.quartz.QuartzJobBean類的方式

2.作業(yè)類不繼承org.springframework.scheduling.quartz.QuartzJobBean類的方式

注:個人比較推崇第二種,因為這種方式下的作業(yè)類仍然是POJO。

* 按任務調度的觸發(fā)時機來分,主要有以下兩種:

1.每隔指定時間則觸發(fā)一次,對應的調度器為org.springframework.scheduling.quartz.SimpleTriggerBean

2.每到指定時間則觸發(fā)一次,對應的調度器為org.springframework.scheduling.quartz.CronTriggerBean

注:這兩種觸發(fā)方式均可以跟兩種作業(yè)繼承方式相互組合來使用。

下面簡單演示一下在spring對Quartz的用法。

二、作業(yè)類繼承org.springframework.scheduling.quartz.QuartzJobBean類,每到指定時間則觸發(fā)一次

1.編寫作業(yè)類

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; 
 
//調度工廠實例化后,經(jīng)過timeout時間開始執(zhí)行調度 
public void setTimeout(int timeout) { 
 this.timeout = timeout; 
} 
 
/** 
* 要調度的具體任務 
*/ 
@Override 
protected void executeInternal(JobExecutionContext context) 
throws JobExecutionException { 
 
 System.out.println("繼承QuartzJobBean的方式-調度" + ++i + "進行中..."); 
 } 
} 

2.配置作業(yè)類

<!-- 作業(yè)使用繼承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.配置作業(yè)調度的觸發(fā)方式

<!-- 對應于作業(yè)繼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 , - * / 
 
- 區(qū)間 
* 通配符 
? 你不想設置那個字段 
--> 
 
<!-- 每分鐘的第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"); 
 } 
} 

三、作業(yè)類不繼承org.springframework.scheduling.quartz.QuartzJobBean類,每隔指定時間則觸發(fā)一次

1.編寫作業(yè)類

package bean.jobDetailBean; 
 
public class Job2 { 
 
private static int i = 0; 
 
public void doJob2() { 
 System.out.println("不繼承QuartzJobBean方式-調度" + ++i + "進行中..."); 
 } 
} 

2.配置作業(yè)類

<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" /><!-- 作業(yè)不并發(fā)調度 --> 
</bean> 

3.配置作業(yè)調度的觸發(fā)方式

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
<property name="jobDetail" ref="job2" /> 
<property name="startDelay" value="0" /><!-- 調度工廠實例化后,經(jīng)過0秒開始執(zhí)行調度 --> 
<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自帶調度器的例子。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

網(wǎng)頁標題:JavaSpring中Quartz調度器詳解及實例
當前地址:http://muchs.cn/article30/pdphso.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站營銷、品牌網(wǎng)站建設、網(wǎng)站改版、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設