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

Java中Quartz高可用定時(shí)任務(wù)快速入門(mén)

 更新時(shí)間:2022年04月03日 10:27:25   作者:Java知識(shí)圖譜  
如果你想做定時(shí)任務(wù),有高可用方面的需求,或者僅僅想入門(mén)快,上手簡(jiǎn)單,那么選用它準(zhǔn)沒(méi)錯(cuò),感興趣的小伙伴們可以參考一下

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

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

定時(shí)任務(wù)模塊是對(duì)Quartz框架進(jìn)一步封裝,使用更加簡(jiǎ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)聽(tīng)與運(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)行外,還有通過(guò)接口手動(dòng)被觸發(fā)的能力。

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

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

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

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

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

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

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

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

在編寫(xiě)定時(shí)任務(wù)時(shí),可從JobExecutionContext對(duì)象中解析一個(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ā),換句話說(shuō)并發(fā)對(duì)定時(shí)任務(wù)不利,因此需要手動(dòng)禁止。

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

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

6、持久化

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

定時(shí)任務(wù)持久化,僅需修改yml文件配置即可達(dá)到目標(biāo),無(wú)需修改代碼。一般而言使用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ù)庫(kù)名、用戶名、密碼五個(gè)參數(shù)外,其余參數(shù)使用默認(rèn)值即可。

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

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

相關(guān)文章

  • Java中反射reflect的基礎(chǔ)知識(shí)講解

    Java中反射reflect的基礎(chǔ)知識(shí)講解

    這篇文章主要介紹了Java中反射reflect的基礎(chǔ)知識(shí)講解,Java中的反射,它算是Java當(dāng)中非常底層的一個(gè)技術(shù),平時(shí)我們我們用得不多,實(shí)際上它也的確非常復(fù)雜同時(shí)也難以理解,但是涉及到底層的東西Java都給我們封裝好了,我們直接拿來(lái)調(diào)用即可,需要的朋友可以參考下
    2023-10-10
  • 使用Springboot實(shí)現(xiàn)健身房管理系統(tǒng)

    使用Springboot實(shí)現(xiàn)健身房管理系統(tǒng)

    這篇文章主要介紹了使用Springboot如何實(shí)現(xiàn)健身房管理系統(tǒng),希望對(duì)你有所幫助
    2021-07-07
  • SpringBoot無(wú)法訪問(wèn)webapp目錄下的文件問(wèn)題

    SpringBoot無(wú)法訪問(wèn)webapp目錄下的文件問(wèn)題

    這篇文章主要介紹了SpringBoot無(wú)法訪問(wèn)webapp目錄下的文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • MyBatisPlus標(biāo)準(zhǔn)數(shù)據(jù)層CRUD的使用詳解

    MyBatisPlus標(biāo)準(zhǔn)數(shù)據(jù)層CRUD的使用詳解

    這篇文章主要介紹了MyBatisPlus標(biāo)準(zhǔn)數(shù)據(jù)層CRUD的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringBoot2.0整合WebSocket代碼實(shí)例

    SpringBoot2.0整合WebSocket代碼實(shí)例

    這篇文章主要介紹了SpringBoot2.0整合WebSocket代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 使用ShardingJDBC進(jìn)行數(shù)據(jù)分片以及讀寫(xiě)分離

    使用ShardingJDBC進(jìn)行數(shù)據(jù)分片以及讀寫(xiě)分離

    ShardingJDBC是一個(gè)輕量級(jí)的Java框架,提供了數(shù)據(jù)分片、讀寫(xiě)分離、分布式主鍵生成等數(shù)據(jù)訪問(wèn)功能,本文將給大家介紹如何使用ShardingJDBC進(jìn)行數(shù)據(jù)分片以及讀寫(xiě)分離,需要的朋友可以參考下
    2024-01-01
  • Java ThreadLocal類應(yīng)用實(shí)戰(zhàn)案例分析

    Java ThreadLocal類應(yīng)用實(shí)戰(zhàn)案例分析

    這篇文章主要介紹了Java ThreadLocal類應(yīng)用,結(jié)合具體案例形式分析了java ThreadLocal類的功能、原理、用法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • 利用Spring Data MongoDB持久化文檔數(shù)據(jù)的方法教程

    利用Spring Data MongoDB持久化文檔數(shù)據(jù)的方法教程

    這篇文章主要給大家介紹了關(guān)于利用Spring Data MongoDB持久化文檔數(shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-08-08
  • Java中?SLF4J和Logback和Log4j和Logging的區(qū)別與聯(lián)系

    Java中?SLF4J和Logback和Log4j和Logging的區(qū)別與聯(lián)系

    這篇文章主要介紹了Java中?SLF4J和Logback和Log4j和Logging的區(qū)別與聯(lián)系,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考幾種,感興趣的小伙伴可以參考一下
    2022-09-09
  • java類成員中的訪問(wèn)級(jí)別淺析

    java類成員中的訪問(wèn)級(jí)別淺析

    在本篇文章里小編給大家整理的是一篇關(guān)于java類成員中的訪問(wèn)級(jí)別淺析內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)下。
    2021-01-01

最新評(píng)論