91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中Quartz高可用定時任務怎么實現

發布時間:2022-04-06 10:55:24 來源:億速云 閱讀:200 作者:iii 欄目:開發技術

本篇內容介紹了“Java中Quartz高可用定時任務怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

定時任務使用指南

如果你想做定時任務,有高可用方面的需求,或者僅僅想入門快,上手簡單,那么選用它準沒錯。

定時任務模塊是對Quartz框架進一步封裝,使用更加簡潔。

1、引入依賴

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

2、快速上手

實現org.quartz.Job接口;使用注解CronExp添加任務的調度策略;使用注解Component將任務注入容器中。

啟動項目,定時任務便處于監聽與運行中。

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

3、手動觸發定時任務

定時任務除了以既有頻率周期性運行外,還有通過接口手動被觸發的能力。

調用如下接口,可手動觸發任務ID編號為jobId的任務。

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

如果有手動觸發定時任務的需求,則需要任務ID唯一并已知,因此需要在編寫定時任務時手動指定。

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

通過注解CronExp的id屬性可指定任務ID,不顯示指定則使用隨機ID,不滿足已知的條件,因此無法手動觸發。

4、帶參數任務

盡管大多數任務不需要注入參數,但仍有少量的場景需要向定時任務注入參數。

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

在編寫定時任務時,可從JobExecutionContext對象中解析一個Map,從而完成參數的注入。

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

上述http調用的含義是手動觸發任務ID為【1】的任務,并且向其傳遞參數為【key】值為【a】的參數。

5、任務并發

本框架不支持任務并發,換句話說并發對定時任務不利,因此需要手動禁止。

需要注意的是Quartz的并發是指當任務執行耗時超過任務調度周期時,上一個任務未執行完,新任務是否執行。

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

6、持久化

如果定時任務有高可用的需求,那么需要對任務進行持久化。定時任務數據持久化到數據庫中后,支持應用程序多開。定時任務持久化多節點部署后,集群中單節點故障不影響定時任務的執行。

定時任務持久化,僅需修改yml文件配置即可達到目標,無需修改代碼。一般而言使用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

除了修改主機、端口、數據庫名、用戶名、密碼五個參數外,其余參數使用默認值即可。

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

“Java中Quartz高可用定時任務怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

佳木斯市| 鄂温| 仪征市| 略阳县| 宣化县| 昌宁县| 驻马店市| 雷波县| 杭州市| 元朗区| 南郑县| 咸丰县| 涟水县| 巴中市| 磐安县| 盘山县| 吉木乃县| 习水县| 林芝县| 鹿泉市| 沅江市| 古浪县| 天气| 奇台县| 砚山县| 泰兴市| 开化县| 平果县| 莆田市| 沂源县| 多伦县| 四平市| 大化| 大方县| 鹤山市| 分宜县| 会昌县| 南雄市| 六安市| 时尚| 麻阳|