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

Quartz高可用定時(shí)任務(wù)的快速上手指南

 更新時(shí)間:2022年04月02日 08:29:10   作者:Java知識圖譜  
Quartz的分布式策略就是一種以數(shù)據(jù)庫作為邊界資源的并發(fā)策略,每個(gè)節(jié)點(diǎn)都遵守相同的操作規(guī)范,使得對數(shù)據(jù)庫的操作可以串行執(zhí)行,而不同名稱的調(diào)度器又可以互不影響的并行運(yùn)行,下面這篇文章主要介紹了Quartz高可用定時(shí)任務(wù)快速上手的相關(guān)資料,需要的朋友可以參考下

定時(shí)任務(wù)使用指南

如果你想做定時(shí)任務(wù),有高可用方面的需求,或者僅僅想入門快,上手簡單,那么選用它準(zhǔn)沒錯(cuò)。

定時(shí)任務(wù)模塊是對Quartz框架進(jìn)一步封裝,使用更加簡潔。

1、引入依賴

<dependency>
    <groupId>xin.altitude.cms</groupId>
    <artifactId>ucode-cms-quartz</artifactId>
    <version>1.5.4.1</version>
</dependency>

2、快速上手

實(shí)現(xiàn)org.quartz.Job接口;使用注解CronExp添加任務(wù)的調(diào)度策略;使用注解Component將任務(wù)注入容器中。

啟動(dòng)項(xiàng)目,定時(shí)任務(wù)便處于監(jiān)聽與運(yùn)行中。

@Component
@DisallowConcurrentExecution
@CronExp(cron = "0/5 * * * * ?")
public class DemoJob implements Job {
    @Override
    public void execute(JobExecutionContext context) {
        System.out.println("任務(wù)1:" + LocalDateTime.now());
    }
}

3、手動(dòng)觸發(fā)定時(shí)任務(wù)

定時(shí)任務(wù)除了以既有頻率周期性運(yùn)行外,還有通過接口手動(dòng)被觸發(fā)的能力。

調(diào)用如下接口,可手動(dòng)觸發(fā)任務(wù)ID編號為jobId的任務(wù)。

http://localhost:8080/cms-api/quartz/job/{jobId}

如果有手動(dòng)觸發(fā)定時(shí)任務(wù)的需求,則需要任務(wù)ID唯一并且已知,因此需要在編寫定時(shí)任務(wù)時(shí)手動(dòng)指定。

@CronExp(id = 1, cron = "0/5 * * * * ?")

通過注解CronExp的id屬性可指定任務(wù)ID,不顯示指定則使用隨機(jī)ID,不滿足已知的條件,因此無法手動(dòng)觸發(fā)。

4、帶參數(shù)任務(wù)

盡管大多數(shù)任務(wù)不需要注入?yún)?shù),但仍有少量的場景需要向定時(shí)任務(wù)注入?yún)?shù)。

public void execute(JobExecutionContext context) {
    /* 如果在調(diào)用任務(wù)時(shí)傳入了參數(shù),則能夠從Map中獲取 */
    Map<String, Object> dataMap = context.getMergedJobDataMap();
    /* 比如從Map中獲取一個(gè)鍵值對,一般來說參數(shù)均為基本數(shù)據(jù)類型 */
    Object key = dataMap.get("key");
    System.out.println("任務(wù)2:" + LocalDateTime.now() + ": " + key);
}

在編寫定時(shí)任務(wù)時(shí),可從JobExecutionContext對象中解析一個(gè)Map,從而完成參數(shù)的注入。

http://localhost:8080/cms-api/quartz/job/1?key=a

上述http調(diào)用的含義是手動(dòng)觸發(fā)任務(wù)ID為【1】的任務(wù),并且向其傳遞參數(shù)為【key】值為【a】的參數(shù)。

5、任務(wù)并發(fā)

本框架不支持任務(wù)并發(fā),換句話說并發(fā)對定時(shí)任務(wù)不利,因此需要手動(dòng)禁止。

需要注意的是Quartz的并發(fā)是指當(dāng)任務(wù)執(zhí)行耗時(shí)超過任務(wù)調(diào)度周期時(shí),上一個(gè)任務(wù)未執(zhí)行完,新任務(wù)是否執(zhí)行。

一般來說需要顯示禁止并發(fā),在任務(wù)類上添加注解DisallowConcurrentExecution即可禁止任務(wù)并發(fā)。

6、持久化

如果定時(shí)任務(wù)有高可用的需求,那么需要對任務(wù)進(jìn)行持久化。定時(shí)任務(wù)數(shù)據(jù)持久化到數(shù)據(jù)庫中后,支持應(yīng)用程序多開。定時(shí)任務(wù)持久化多節(jié)點(diǎn)部署后,集群中單節(jié)點(diǎn)故障不影響定時(shí)任務(wù)的執(zhí)行。

定時(shí)任務(wù)持久化,僅需修改yml文件配置即可達(dá)到目標(biāo),無需修改代碼。一般而言使用Mysql做持久化的容器。

spring:
  quartz:
    properties:
      org.quartz.jobStore.isClustered: true
      org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
      org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
      org.quartz.jobStore.dataSource: qzDS
      org.quartz.dataSource.qzDS.driver: com.mysql.cj.jdbc.Driver
      org.quartz.dataSource.qzDS.URL: jdbc:mysql://localhost:3306/quartz-demo
      org.quartz.dataSource.qzDS.user: root
      org.quartz.dataSource.qzDS.password: 123456

除了修改主機(jī)、端口、數(shù)據(jù)庫名、用戶名、密碼五個(gè)參數(shù)外,其余參數(shù)使用默認(rèn)值即可。

配置完數(shù)據(jù)庫連接后,使用SQL腳本,注意初始化數(shù)據(jù)庫

總結(jié) 

到此這篇關(guān)于Quartz高可用定時(shí)任務(wù)的快速上手的文章就介紹到這了,更多相關(guān)Quartz高可用定時(shí)任務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java內(nèi)存緩存工具Guava LoadingCache使用解析

    Java內(nèi)存緩存工具Guava LoadingCache使用解析

    這篇文章主要介紹了Java內(nèi)存緩存工具Guava LoadingCache使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Spinrg WebFlux中Cookie的讀寫的示例

    Spinrg WebFlux中Cookie的讀寫的示例

    這篇文章主要介紹了Spinrg WebFlux中Cookie的讀寫的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 聊聊maven與jdk版本對應(yīng)關(guān)系

    聊聊maven與jdk版本對應(yīng)關(guān)系

    這篇文章主要介紹了maven與jdk版本對應(yīng)關(guān)系,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot解決Required?String?parameter?xxx?is?not?present問題

    SpringBoot解決Required?String?parameter?xxx?is?not?prese

    這篇文章主要介紹了SpringBoot解決Required?String?parameter?xxx?is?not?present問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖

    SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖

    這篇文章給大家介紹了SpringBoot整合Echarts繪制靜態(tài)數(shù)據(jù)柱狀圖和餅圖,文中通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-03-03
  • SpringBoot如何配置文件properties和yml

    SpringBoot如何配置文件properties和yml

    這篇文章主要介紹了SpringBoot如何配置文件properties和yml問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java實(shí)現(xiàn)堆排序和圖解

    Java實(shí)現(xiàn)堆排序和圖解

    如果將堆理解為二叉樹,那么樹中任一非葉結(jié)點(diǎn)的關(guān)鍵字均不大于(或不小于)其左右孩子(若存在)結(jié)點(diǎn)的關(guān)鍵字,堆排序的時(shí)間復(fù)雜度為O(N*logN),這里我們就來詳解堆排序算法原理及Java版的代碼實(shí)現(xiàn)
    2021-07-07
  • Java經(jīng)典面試題最全匯總208道(四)

    Java經(jīng)典面試題最全匯總208道(四)

    這篇文章主要介紹了Java經(jīng)典面試題最全匯總208道(四),本文章內(nèi)容詳細(xì),該模塊分為了六個(gè)部分,本次為第四部分,需要的朋友可以參考下
    2023-01-01
  • Java lambda表達(dá)式實(shí)現(xiàn)Flink WordCount過程解析

    Java lambda表達(dá)式實(shí)現(xiàn)Flink WordCount過程解析

    這篇文章主要介紹了Java lambda表達(dá)式實(shí)現(xiàn)Flink WordCount過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • IDEA無法創(chuàng)建JDK1.8版本的Springboot項(xiàng)目問題解決(2種方法)

    IDEA無法創(chuàng)建JDK1.8版本的Springboot項(xiàng)目問題解決(2種方法)

    本文主要介紹了IDEA無法創(chuàng)建JDK1.8版本的Springboot項(xiàng)目問題解決,包含兩種解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07

最新評論

启东市| 远安县| 砀山县| 万年县| 宣化县| 雷山县| 当涂县| 永胜县| 南和县| 章丘市| 平顶山市| 镇沅| 宁乡县| 阿克苏市| 建平县| 孝昌县| 礼泉县| 读书| 营口市| 泰宁县| 临安市| 东至县| 许昌县| 苍溪县| 万宁市| 金川县| 中方县| 东平县| 瑞金市| 海门市| 宝兴县| 开封县| 汾西县| 阳泉市| 兴海县| 老河口市| 晋江市| 卫辉市| 乌什县| 金堂县| 南通市|