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

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

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

Quartz核心概念

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

① Job

Job表示一個工作(任務),需要執(zhí)行的具體內容。開發(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í)行的調度程序,Job 是這個可執(zhí)行程調度程序所要執(zhí)行的內容。我們需要通過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代表一個調度容器,一個調度容器中可以注冊多個 JobDetail 和 Trigger。

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

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

    <!-- 注冊一個統(tǒng)一的調度工廠,通過這個調度工廠調度任務 -->
    <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對象,和啟動任務調度。

因為在Spring bean相應的生命周期內,框架已經幫我們完成了啟動與調度。

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

SchedulerFactoryBean自動啟動任務調度的部分源碼

通過查看源碼,我們可以看到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的功能其實相當強大,此案例只是使用了基本的功能,對于更深入的內容沒有展開討論,更多關于Quartz作業(yè)調度的資料請關注腳本之家其它相關文章!

相關文章

  • 詳解消息隊列及RabbitMQ部署和使用

    詳解消息隊列及RabbitMQ部署和使用

    消息隊列是最古老的中間件之一,從系統(tǒng)之間有通信需求開始,就自然產生了消息隊列。本文告訴什么是消息隊列,為什么需要消息隊列,常見的消息隊列有哪些,RabbitMQ的部署和使用
    2021-09-09
  • SpringBoot使用@NotEmpty、@NotBlank、@NotNull注解進行參數(shù)校驗

    SpringBoot使用@NotEmpty、@NotBlank、@NotNull注解進行參數(shù)校驗

    我們經常需要對請求參數(shù)進行校驗,本文主要介紹了SpringBoot使用@NotEmpty、@NotBlank、@NotNull注解進行參數(shù)校驗,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • Java 字節(jié)數(shù)組類型(byte[])與int類型互轉方法

    Java 字節(jié)數(shù)組類型(byte[])與int類型互轉方法

    下面小編就為大家?guī)硪黄狫ava 字節(jié)數(shù)組類型(byte[])與int類型互轉方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Java反射機制及Method.invoke詳解

    Java反射機制及Method.invoke詳解

    這篇文章主要介紹了Java反射機制及Method.invoke詳解,本文講解了JAVA反射機制、得到某個對象的屬性、得到某個類的靜態(tài)屬性、執(zhí)行某對象的方法、執(zhí)行某個類的靜態(tài)方法等內容,需要的朋友可以參考下
    2015-03-03
  • springMVC幾種頁面跳轉方式小結

    springMVC幾種頁面跳轉方式小結

    本篇文章主要介紹了springMVC 幾種頁面跳轉方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Idea中Springboot熱部署無效問題解決

    Idea中Springboot熱部署無效問題解決

    這篇文章主要介紹了Idea中Springboot熱部署無效問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Java8 LocalDateTime極簡時間日期操作小結

    Java8 LocalDateTime極簡時間日期操作小結

    這篇文章主要介紹了Java8-LocalDateTime極簡時間日期操作整理,通過實例代碼給大家介紹了java8 LocalDateTime 格式化問題,需要的朋友可以參考下
    2020-04-04
  • 深入java對象復制的分析

    深入java對象復制的分析

    本篇文章是對java對象復制進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • java Date裝成英文String后,無法再轉回Date的解決方案

    java Date裝成英文String后,無法再轉回Date的解決方案

    本文介紹了java Date裝成英文String后,無法再轉回Date的解決方案。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • java正則表達式判斷強密碼和隨機生成強密碼代碼示例

    java正則表達式判斷強密碼和隨機生成強密碼代碼示例

    這篇文章主要給大家介紹了關于java正則表達式判斷強密碼和隨機生成強密碼的相關資料,最近需要一個密碼強度正則表達式在用戶注冊時校驗用戶密碼強度,需要的朋友可以參考下
    2023-08-08

最新評論

武城县| 苍溪县| 孝昌县| 铁力市| 乌鲁木齐县| 六枝特区| 宁国市| 炉霍县| 华亭县| 崇礼县| 庆阳市| 武宣县| 青州市| 阿尔山市| 旅游| 岑溪市| 昌乐县| 鄂托克前旗| 景谷| 东乌| 江孜县| 巴东县| 霍州市| 正安县| 蒙城县| 革吉县| 武汉市| 磴口县| 屯昌县| 进贤县| 乡城县| 隆尧县| 临邑县| 云龙县| 金寨县| 北海市| 九龙城区| 黄山市| 潼南县| 太保市| 石泉县|