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

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

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

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

ShedLock

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

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

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

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

@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ù)庫,以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定時任務(wù)

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

  
  @Scheduled(cron = "0/1 * * * * ? ")
  @SchedulerLock(name = "測試", 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)在時間是" + format.format(new Date())+ Thread.currentThread().getName());
  }
}

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

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

5.創(chuàng)建mysql數(shù)據(jù)庫中定時任務(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分布式定時器之ShedLock的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Spring Cloud分布式定時器內(nèi)容請搜索腳本之家以前的文章或繼續(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ù)

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

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

    SpringAop如何通過某個子類切父類

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

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

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

    Spring Cloud Hystrix異常處理方法詳解

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

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

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

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

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

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

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

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

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

    Spring注解解析之@ImportResource

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

最新評論