最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

Quartz核心概念

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

① Job

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

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

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

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

② JobDetail

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

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

當然我們也可以通過配置Spring將其注入到應用容器當中,如下:

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

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

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

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

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

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

        //注冊trigger并啟動scheduler
        scheduler.scheduleJob(job,trigger);
        scheduler.start();

在Spring中我們也使用對應的FactoryBean來完成注冊,如下:

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

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

autoStartup自動啟動

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

        scheduler.start();

而在Spring中,我們使用了SchedulerFactoryBean,工廠Bean來完成scheduler對象的注入。我們并沒有顯示地去獲取scheduler對象,和啟動任務調(diào)度。

因為在Spring bean相應的生命周期內(nèi),框架已經(jīng)幫我們完成了啟動與調(diào)度。

(此處我們不討論FactoryBean獲取bean對象的相關細節(jié),大家應該清楚FactoryBean會通過getObject()來返回我們相應的bean)

SchedulerFactoryBean自動啟動任務調(diào)度的部分源碼

通過查看源碼,我們可以看到SchedulerFactoryBean的屬性默認支持scheduler的自動啟動。

我們也可以通過setAutoStartup()方法來禁用此選項。

    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其實沒有直接綁定,理論上兩者都可以復用。但是Spring的形式中因為我們使用了特定的FactoryBean,Trigger綁定了JobDetail,能夠復用的僅有JobDetail。

總結

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

相關文章

最新評論

武义县| 灵石县| 吉木萨尔县| 镇巴县| 崇左市| 惠来县| 越西县| 怀化市| 怀化市| 静海县| 宜良县| 辽中县| 河池市| 大名县| 正蓝旗| 八宿县| 新巴尔虎左旗| 乌拉特前旗| 育儿| 武宣县| 甘孜县| 南投市| 辽宁省| 永州市| 泰和县| 靖边县| 陇南市| 彭阳县| 香港| 石首市| 四会市| 富民县| 厦门市| 安化县| 阳曲县| 平谷区| 雅江县| 伽师县| 资溪县| 威宁| 松潘县|