欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Quartz作業(yè)調(diào)度基本使用詳解

 更新時(shí)間:2022年08月31日 15:05:48   作者:石頭耳東  
這篇文章主要為大家介紹了Quartz作業(yè)調(diào)度基本使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Quartz核心概念

實(shí)際業(yè)務(wù)開(kāi)發(fā)中會(huì)遇到定時(shí)任務(wù)的情形,這種時(shí)候可以使用Quartz來(lái)幫助我們便捷地完成。

① Job

Job表示一個(gè)工作(任務(wù)),需要執(zhí)行的具體內(nèi)容。開(kāi)發(fā)中我們可以通過(guò)實(shí)現(xiàn)Job接口,來(lái)指定我們具體要執(zhí)行的工作。不過(guò)也可以直接寫(xiě)一個(gè)類,Spring會(huì)幫助我們做具體的注入。

public interface Job {
    void execute(JobExecutionContext context)
        throws JobExecutionException;
}

當(dāng)然我們可以使用Spring配置將Job注入容器,如下:

<bean id="helloJob" class="com.example.jobs.HelloJob"/>

② JobDetail

JobDetail表示一個(gè)具體的可執(zhí)行的調(diào)度程序,Job 是這個(gè)可執(zhí)行程調(diào)度程序所要執(zhí)行的內(nèi)容。我們需要通過(guò)JobDetail來(lái)對(duì)Job進(jìn)行綁定,具體如下:

  JobDetail job = newJob(HelloJob.class)
      .withIdentity("helloJob", "group1") 
      .build();

當(dāng)然我們也可以通過(guò)配置Spring將其注入到應(yīng)用容器當(dāng)中,如下:

    <bean id="jobDetail"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!-- 注入目標(biāo)對(duì)象 -->
        <property name="targetObject" ref="helloJob"/>
        <!-- 注入目標(biāo)方法 -->
        <property name="targetMethod" value="sayHello"/>
    </bean>

③ TriggerTrigger定義執(zhí)行給定作業(yè)的計(jì)劃的組件。

  Trigger trigger = newTrigger()
      .withIdentity("myTrigger", "group1")
      .startNow()
      .withSchedule(simpleSchedule()
          .withIntervalInSeconds(40)
          .repeatForever())            
      .build();

在Spring配置中繼續(xù)注冊(cè)我們的觸發(fā)器,如下:

    <bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <!-- 注入JobDetail -->
        <property name="jobDetail" ref="jobDetail"/>
        <!-- 指定觸發(fā)的時(shí)間,基于Cron表達(dá)式 -->
        <property name="cronExpression">
            <!--<value>0 0 2 * * ?</value>-->
            <value>0/10 * * * * ?</value>
        </property>
    </bean>

④ SchedulerScheduler代表一個(gè)調(diào)度容器,一個(gè)調(diào)度容器中可以注冊(cè)多個(gè) JobDetail 和 Trigger。

        //注冊(cè)trigger并啟動(dòng)scheduler
        scheduler.scheduleJob(job,trigger);
        scheduler.start();

在Spring中我們也使用對(duì)應(yīng)的FactoryBean來(lái)完成注冊(cè),如下:

    <!-- 注冊(cè)一個(gè)統(tǒng)一的調(diào)度工廠,通過(guò)這個(gè)調(diào)度工廠調(diào)度任務(wù) -->
    <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <!-- 注入多個(gè)觸發(fā)器 -->
        <property name="triggers">
            <list>
                <ref bean="myTrigger"/>
            </list>
        </property>
    </bean>

Quartz結(jié)合Spring使用的一些細(xì)節(jié)

autoStartup自動(dòng)啟動(dòng)

通過(guò)觀察代碼,我們不難發(fā)現(xiàn)在編碼中我們手動(dòng)去啟動(dòng)了scheduler,如下:

        scheduler.start();

而在Spring中,我們使用了SchedulerFactoryBean,工廠Bean來(lái)完成scheduler對(duì)象的注入。我們并沒(méi)有顯示地去獲取scheduler對(duì)象,和啟動(dòng)任務(wù)調(diào)度。

因?yàn)樵赟pring bean相應(yīng)的生命周期內(nèi),框架已經(jīng)幫我們完成了啟動(dòng)與調(diào)度。

(此處我們不討論FactoryBean獲取bean對(duì)象的相關(guān)細(xì)節(jié),大家應(yīng)該清楚FactoryBean會(huì)通過(guò)getObject()來(lái)返回我們相應(yīng)的bean)

SchedulerFactoryBean自動(dòng)啟動(dòng)任務(wù)調(diào)度的部分源碼

通過(guò)查看源碼,我們可以看到SchedulerFactoryBean的屬性默認(rèn)支持scheduler的自動(dòng)啟動(dòng)。

我們也可以通過(guò)setAutoStartup()方法來(lái)禁用此選項(xiàng)。

    private boolean autoStartup = true;
    /**
     * Set whether to automatically start the scheduler after initialization.
     * &lt;p&gt;Default is "true"; set this to "false" to allow for manual startup.
     */
    public void setAutoStartup(boolean autoStartup) {
        this.autoStartup = autoStartup;
    }

JobDetail與Trigger

編碼形式的JobDetail與Trigger其實(shí)沒(méi)有直接綁定,理論上兩者都可以復(fù)用。但是Spring的形式中因?yàn)槲覀兪褂昧颂囟ǖ腇actoryBean,Trigger綁定了JobDetail,能夠復(fù)用的僅有JobDetail。

總結(jié)

Quartz的功能其實(shí)相當(dāng)強(qiáng)大,此案例只是使用了基本的功能,對(duì)于更深入的內(nèi)容沒(méi)有展開(kāi)討論,更多關(guān)于Quartz作業(yè)調(diào)度的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java使用FTPClient類讀寫(xiě)FTP

    Java使用FTPClient類讀寫(xiě)FTP

    這篇文章主要為大家詳細(xì)介紹了Java使用FTPClient類讀寫(xiě)FTP的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • java獲取nvidia顯卡信息的實(shí)現(xiàn)示例

    java獲取nvidia顯卡信息的實(shí)現(xiàn)示例

    現(xiàn)在的需求是要獲取nvidia顯卡的使用情況,本文主要介紹了java獲取nvidia顯卡信息的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Java對(duì)象在內(nèi)存中的布局是如何實(shí)現(xiàn)的?

    Java對(duì)象在內(nèi)存中的布局是如何實(shí)現(xiàn)的?

    Java對(duì)象在內(nèi)存中屬于oop-klass二分模型,即對(duì)象的實(shí)例數(shù)據(jù)和對(duì)象類型的元數(shù)據(jù)(字段定義、方法、常量池等元數(shù)據(jù))是分開(kāi)存儲(chǔ)的.而由于JVM對(duì)對(duì)象內(nèi)相同寬度的字段分配在一起,所以只要指定了字段類型分配的順序,就可以計(jì)算出每種類型字段相對(duì)于當(dāng)前對(duì)象的偏移起始位置
    2021-06-06
  • Java結(jié)構(gòu)型設(shè)計(jì)模式之橋接模式詳細(xì)講解

    Java結(jié)構(gòu)型設(shè)計(jì)模式之橋接模式詳細(xì)講解

    橋接,顧名思義,就是用來(lái)連接兩個(gè)部分,使得兩個(gè)部分可以互相通訊。橋接模式將系統(tǒng)的抽象部分與實(shí)現(xiàn)部分分離解耦,使他們可以獨(dú)立的變化。本文通過(guò)示例詳細(xì)介紹了橋接模式的原理與使用,需要的可以參考一下
    2022-09-09
  • java GUI編程之布局控制器(Layout)實(shí)例分析

    java GUI編程之布局控制器(Layout)實(shí)例分析

    這篇文章主要介紹了java GUI編程之布局控制器(Layout),結(jié)合實(shí)例形式分析了java GUI編程中布局控制器(Layout)具體功能、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • mybatis中方法返回泛型與resultType不一致的解決

    mybatis中方法返回泛型與resultType不一致的解決

    這篇文章主要介紹了mybatis中方法返回泛型與resultType不一致的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實(shí)現(xiàn)

    SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot Redis配置Fastjson進(jìn)行序列化和反序列化實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • SpringBoot項(xiàng)目docker容器部署實(shí)現(xiàn)

    SpringBoot項(xiàng)目docker容器部署實(shí)現(xiàn)

    本文主要介紹了SpringBoot項(xiàng)目docker容器部署實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • springboot如何配置定時(shí)任務(wù)

    springboot如何配置定時(shí)任務(wù)

    這篇文章主要介紹了springboot如何配置定時(shí)任務(wù),幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • Java中可變長(zhǎng)度參數(shù)代碼詳解

    Java中可變長(zhǎng)度參數(shù)代碼詳解

    這篇文章主要介紹了Java中可變長(zhǎng)度參數(shù)代碼詳解,涉及了實(shí)參個(gè)數(shù)可變的定義方法,數(shù)組包裹實(shí)參等幾個(gè)問(wèn)題,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-12-12

最新評(píng)論