一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Spring中的定時(shí)調(diào)度

 閃寧斯達(dá) 2010-09-16

Spring中的定時(shí)調(diào)度使用OpenSymphony Quartz 調(diào)度器

1.使用JobDetailBean

JobDetail 對象保存運(yùn)行一個(gè)任務(wù)所需的全部信息。Spring提供一個(gè)叫作JobDetailBean的類讓JobDetail能對一些有意義的初始值進(jìn)行初始化。讓我們來看個(gè)例子:

<bean name="exampleJob" class="org.springframework.scheduling.quartz.JobDetailBean"> 
   <property name="jobClass" value="example.ExampleJob" />
   <property name="jobDataAsMap">
      <map>
        <entry key="timeout" value="5" />
      </map>
    </property>
</bean>
Job detail bean擁有所有運(yùn)行job(ExampleJob)的必要信息。通過job的data map來制定timeout。Job的data map可以通過JobExecutionContext(在運(yùn)行時(shí)刻傳遞給你)來得到,但是JobDetailBean同時(shí)把從job的data map中得到的屬性映射到實(shí)際job中的屬性中去。 所以,如果ExampleJob中包含一個(gè)名為timeout的屬性,JobDetailBean將自動(dòng)為它賦值:
package example;
public class ExampleJob extends QuartzJobBean {
    private int timeout;
   
    public void setTimeout(int timeout) {
      this.timeout = timeout;
    }
    protected void executeInternal(JobExecutionContext ctx) throws JobExecutionException {
     // do the actual work
    }
}

當(dāng)然,你同樣可以對Job detail bean中所有其他的額外配置進(jìn)行設(shè)置。

2.使用 MethodInvokingJobDetailFactoryBean

通常情況下,你只需要調(diào)用特定對象上的一個(gè)方法即可實(shí)現(xiàn)任務(wù)調(diào)度。你可以使用MethodInvokingJobDetailFactoryBean準(zhǔn)確的做到這一點(diǎn):

<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
  <property name="targetObject" ref="exampleBusinessObject" />
  <property name="targetMethod" value="doIt" />
</bean>
上面例子將調(diào)用exampleBusinessObject中的doIt方法(如下):
public class ExampleBusinessObject {
 // properties and collaborators public void doIt() {
  // do the actual work

   }
}
<bean id="exampleBusinessObject" class="examples.ExampleBusinessObject"/>

使用MethodInvokingJobDetailFactoryBean你不需要?jiǎng)?chuàng)建只有一行代碼且只調(diào)用一個(gè)方法的job, 你只需要?jiǎng)?chuàng)建真實(shí)的業(yè)務(wù)對象來包裝具體的細(xì)節(jié)的對象。

默認(rèn)情況下,Quartz Jobs是無狀態(tài)的,可能導(dǎo)致jobs之間互相的影響。如果你為相同的JobDetail指定兩個(gè)Trigger, 很可能當(dāng)?shù)谝粋€(gè)job完成之前,第二個(gè)job就開始了。如果JobDetail對象實(shí)現(xiàn)了Stateful接口,就不會(huì)發(fā)生這樣的事情。第二個(gè)job將不會(huì)在第一個(gè)job完成之前開始。為了使得jobs不并發(fā)運(yùn)行,設(shè)置MethodInvokingJobDetailFactoryBean中的concurrent標(biāo)記為false。

<bean id="jobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
  <property name="targetObject" ref="exampleBusinessObject" />
  <property name="targetMethod" value="doIt" />
  <property name="concurrent" value="false" />
</bean>

3. 使用triggers和SchedulerFactoryBean來包裝任務(wù)

我們已經(jīng)創(chuàng)建了job details,jobs。我們同時(shí)回顧了允許你調(diào)用特定對象上某一個(gè)方法的便捷的bean。當(dāng)然我們?nèi)孕枰{(diào)度這些jobs。這需要使用triggers和SchedulerFactoryBean來完成。 Quartz自帶一些可供使用的triggers。Spring提供兩個(gè)子類triggers,分別為CronTriggerBeanSimpleTriggerBean

Triggers也需要被調(diào)度。Spring提供SchedulerFactoryBean來暴露一些屬性來設(shè)置triggers。SchedulerFactoryBean負(fù)責(zé)調(diào)度那些實(shí)際的triggers。

幾個(gè)例子:

<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
   <!-- see the example of method invoking job above -->
   <property name="jobDetail" ref="jobDetail" />
   <!-- 10 seconds -->
   <property name="startDelay" value="10000" />
   <!-- repeat every 50 seconds -->
   <property name="repeatInterval" value="50000" />
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
   <property name="jobDetail" ref="exampleJob" />
   <!-- run every morning at 6 AM -->
   <property name="cronexpression_r_r" value="0 0 6 * * ?" />
</bean>
現(xiàn)在我們創(chuàng)建了兩個(gè)triggers,其中一個(gè)開始延遲10秒以后每50秒運(yùn)行一次,另一個(gè)每天早上6點(diǎn)鐘運(yùn)行。 我們需要?jiǎng)?chuàng)建一個(gè)SchedulerFactoryBean來最終實(shí)現(xiàn)上述的一切:
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
   <property name="triggers">
      <list>
        <ref bean="cronTrigger" />
        <ref bean="simpleTrigger" />
      </list>
   </property>
</bean>

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多

    国产又粗又硬又长又爽的剧情| 国产欧美日韩精品一区二| 欧美日不卡无在线一区| 国产原创激情一区二区三区| 欧美一区二区三区不卡高清视| 欧美国产亚洲一区二区三区| 色丁香之五月婷婷开心| 国产午夜福利一区二区| 日本加勒比在线观看不卡| 日本不卡视频在线观看| 亚洲国产av一二三区| 精品一区二区三区乱码中文| 午夜福利视频偷拍91| 中文字幕亚洲在线一区| 大伊香蕉一区二区三区| 欧美精品专区一区二区| 亚洲日本加勒比在线播放 | 麻豆91成人国产在线观看| 日韩精品你懂的在线观看| 久久99一本色道亚洲精品| 亚洲国产欧美精品久久| 不卡视频在线一区二区三区| 精品日韩国产高清毛片| 日本精品啪啪一区二区三区| 日韩黄色一级片免费收看| 国产又粗又黄又爽又硬的| 日韩丝袜诱惑一区二区| 亚洲中文字幕一区三区| 精品欧美日韩一二三区| 日韩特级黄色大片在线观看| 视频一区二区黄色线观看| 国产亚洲精品一二三区| 日本人妻的诱惑在线观看| 一区二区三区欧美高清| 色婷婷国产熟妇人妻露脸| 91精品国产综合久久精品 | 久久亚洲成熟女人毛片| 中文字字幕在线中文乱码二区| 亚洲国产中文字幕在线观看| 国产精品成人一区二区在线 | av在线免费播放一区二区|