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

Spring Cloud分布式定時(shí)器之ShedLock的實(shí)現(xiàn)

 更新時(shí)間:2021年03月09日 10:39:48   作者:旺旺老余  
這篇文章主要介紹了Spring Cloud分布式定時(shí)器之ShedLock的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在實(shí)際的項(xiàng)目開發(fā)工作中,我們經(jīng)常會(huì)遇到需要做一些定時(shí)任務(wù)的工作,那么在Spring Cloud中是如何實(shí)現(xiàn)的?今天來(lái)介紹下其中的一種解決方案——輕量級(jí)分布式定時(shí)鎖ShedLock

ShedLock

ShedLock是一個(gè)在分布式環(huán)境中使用的定時(shí)任務(wù)框架,用于解決在分布式環(huán)境中的多個(gè)實(shí)例的相同定時(shí)任務(wù)在同一時(shí)間點(diǎn)重復(fù)執(zhí)行的問(wèn)題。

解決思路是通過(guò)對(duì)公用的數(shù)據(jù)庫(kù)中的某個(gè)表進(jìn)行記錄和加鎖,使得同一時(shí)間點(diǎn)只有第一個(gè)執(zhí)行定時(shí)任務(wù)并成功在數(shù)據(jù)庫(kù)表中寫入相應(yīng)記錄的節(jié)點(diǎn)能夠成功執(zhí)行而其他節(jié)點(diǎn)直接跳過(guò)該任務(wù)。
目前已經(jīng)實(shí)現(xiàn)的支持?jǐn)?shù)據(jù)存儲(chǔ)類型不僅僅只有關(guān)系型數(shù)據(jù)庫(kù),還包括MongoDB,Zookeeper,Redis,Hazelcast。

1. pom文件添加相關(guān)依賴

在pom文件中添加shedLock相關(guān)依賴

 <!--shedlock-->
    <dependency>
      <groupId>net.javacrumbs.shedlock</groupId>
      <artifactId>shedlock-spring</artifactId>
      <version>2.2.0</version>
    </dependency>
    <dependency>
      <groupId>net.javacrumbs.shedlock</groupId>
      <artifactId>shedlock-provider-jdbc-template</artifactId>
      <version>2.2.0</version>
    </dependency>

2. 添加相關(guān)配置

在啟動(dòng)類添加@EnableScheduling和@EnableSchedulerLock(defaultLockAtMostFor = "PT30S")注解,表示要啟動(dòng)ShedLock定時(shí)任務(wù)

defaultLockAtMostFor要設(shè)置值,不設(shè)置會(huì)報(bào)錯(cuò);設(shè)置值一般設(shè)置比定時(shí)任務(wù)大點(diǎn)值,一般在每個(gè)定時(shí)任務(wù)中都會(huì)配置defaultLockAtMostFor值,會(huì)覆蓋啟動(dòng)類中的值

@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "PT30S")
public class OneStopServiceApplication {
  public static void main(String[] args) {
    SpringApplication.run(OneStopServiceApplication.class, args);
  }

}

3.添加ShedLock配類

shedLock支持關(guān)系型數(shù)據(jù)庫(kù),以mysql為例,配置mysql以及表名;shedLock默認(rèn)表名為shedlock,可以設(shè)置自定義表名。

@Configuration
public class ScheduledLockConfig {
  @Bean
  public LockProvider lockProvider(DataSource dataSource) {
    //自定義表名
    return new JdbcTemplateLockProvider(dataSource,"ccsy_shedlock");
  }
}

4.ShedLock定時(shí)任務(wù)

@Component
public class HourTask {
  /**
   * 最小鎖定時(shí)間,一般設(shè)置成定時(shí)任務(wù)小一點(diǎn)
   */
  private static final int MIN_LOCK_TIME = 1000;//單位毫秒
  /**
   * 最大鎖定時(shí)間,一般設(shè)置成比正常執(zhí)行時(shí)間長(zhǎng)的值
   */
  private static final int MAX_LOCK_TIME = 1000 * 2;//單位毫秒

  
  @Scheduled(cron = "0/1 * * * * ? ")
  @SchedulerLock(name = "測(cè)試", lockAtMostFor = MAX_LOCK_TIME, lockAtLeastFor = MIN_LOCK_TIME)
  public void visitCountTaskByTwoHour() {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println("現(xiàn)在時(shí)間是" + format.format(new Date())+ Thread.currentThread().getName());
  }
}

@SchedulerLock注解一共支持五個(gè)參數(shù),分別是

  • name 用來(lái)標(biāo)注一個(gè)定時(shí)服務(wù)的名字,被用于寫入數(shù)據(jù)庫(kù)作為區(qū)分不同服務(wù)的標(biāo)識(shí),如果有多個(gè)同名定時(shí)任務(wù)則同一時(shí)間點(diǎn)只有一個(gè)執(zhí)行成功
  • lockAtMostFor 成功執(zhí)行任務(wù)的節(jié)點(diǎn)所能擁有獨(dú)占鎖的最長(zhǎng)時(shí)間,單位是毫秒ms
  • lockAtMostForString 成功執(zhí)行任務(wù)的節(jié)點(diǎn)所能擁有的獨(dú)占鎖的最長(zhǎng)時(shí)間的字符串表達(dá),例如“PT14M”表示為14分鐘
  • lockAtLeastFor 成功執(zhí)行任務(wù)的節(jié)點(diǎn)所能擁有獨(dú)占所的最短時(shí)間,單位是毫秒ms
  • lockAtLeastForString 成功執(zhí)行任務(wù)的節(jié)點(diǎn)所能擁有的獨(dú)占鎖的最短時(shí)間的字符串表達(dá),例如“PT14M”表示為14分鐘

5.創(chuàng)建mysql數(shù)據(jù)庫(kù)中定時(shí)任務(wù)ccsy_shedlock表

CREATE TABLE ccsy_shedlock (
 NAME VARCHAR ( 64 ),
 lock_until TIMESTAMP ( 3 ) NULL,
 locked_at TIMESTAMP ( 3 ) NULL,
locked_by VARCHAR ( 255 ),
PRIMARY KEY ( NAME ))

到此這篇關(guān)于Spring Cloud分布式定時(shí)器之ShedLock的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Spring Cloud分布式定時(shí)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • hadoop client與datanode的通信協(xié)議分析

    hadoop client與datanode的通信協(xié)議分析

    本文主要分析了hadoop客戶端read和write block的流程. 以及client和datanode通信的協(xié)議, 數(shù)據(jù)流格式等
    2012-11-11
  • Java編程在方法中哪些時(shí)候需要參數(shù)

    Java編程在方法中哪些時(shí)候需要參數(shù)

    這篇文章主要介紹了Java編程在方法中哪些時(shí)候需要參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringAop如何通過(guò)某個(gè)子類切父類

    SpringAop如何通過(guò)某個(gè)子類切父類

    這篇文章主要介紹了SpringAop如何通過(guò)某個(gè)子類切父類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 23種設(shè)計(jì)模式(22)java狀態(tài)模式

    23種設(shè)計(jì)模式(22)java狀態(tài)模式

    這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java狀態(tài)模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Spring Cloud Hystrix異常處理方法詳解

    Spring Cloud Hystrix異常處理方法詳解

    這篇文章主要介紹了Spring Cloud Hystrix異常處理方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Spring Aware標(biāo)記接口使用案例解析

    Spring Aware標(biāo)記接口使用案例解析

    這篇文章主要介紹了Spring Aware標(biāo)記接口使用案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • RabbitMQ消息隊(duì)列中多路復(fù)用Channel信道詳解

    RabbitMQ消息隊(duì)列中多路復(fù)用Channel信道詳解

    這篇文章主要介紹了RabbitMQ消息隊(duì)列中多路復(fù)用Channel信道詳解,消息Message是指在應(yīng)用間傳送的數(shù)據(jù),消息可以非常簡(jiǎn)單,比如只包含文本字符串,也可以更復(fù)雜,可能包含嵌入對(duì)象,需要的朋友可以參考下
    2023-08-08
  • Netty分布式獲取異線程釋放對(duì)象源碼剖析

    Netty分布式獲取異線程釋放對(duì)象源碼剖析

    這篇文章主要為大家介紹了Netty分布式獲取異線程釋放的對(duì)象源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-03-03
  • 關(guān)于@Valid注解大全以及用法規(guī)范

    關(guān)于@Valid注解大全以及用法規(guī)范

    這篇文章主要介紹了關(guān)于@Valid注解大全以及用法規(guī)范,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring注解解析之@ImportResource

    Spring注解解析之@ImportResource

    之前我們使用spring,最多的還是通過(guò)xml配置文件的方式來(lái)配置spring bean等內(nèi)容,隨著注解的廣泛應(yīng)用和spring4中Java config的引入,xml配置文件方式逐步被替換,但是如果是想要使用xml配置文件方式的話,也可以通過(guò)@ImportResource注解來(lái)實(shí)現(xiàn),下面我們來(lái)一起看下如何使用.
    2021-05-05

最新評(píng)論