日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

SpringBoot強大的分布式鎖組件Lock4j,支持多種實現(xiàn)

來源: 責編: 時間:2024-07-12 17:24:11 766觀看
導(dǎo)讀環(huán)境:SpringBoot3.2.51. 簡介lock4j是一個分布式鎖組件,其提供了多種不同的支持以滿足不同性能和環(huán)境的需求。底層通過Spring AOP技術(shù)實現(xiàn),而該切面的優(yōu)先級是最高的,也就是說當你的環(huán)境中有多個切面時(如:聲明式事務(wù)),也不會

環(huán)境:SpringBoot3.2.5TL128資訊網(wǎng)——每日最新資訊28at.com

1. 簡介

lock4j是一個分布式鎖組件,其提供了多種不同的支持以滿足不同性能和環(huán)境的需求。底層通過Spring AOP技術(shù)實現(xiàn),而該切面的優(yōu)先級是最高的,也就是說當你的環(huán)境中有多個切面時(如:聲明式事務(wù)),也不會導(dǎo)致失效問題。該組件具有如下2個特性:TL128資訊網(wǎng)——每日最新資訊28at.com

  • 簡單易用,功能強大,擴展性強。
  • 支持redission,redisTemplate,zookeeper。可混用,支持擴展。

接下來將詳細介紹基于Redis的Lock4J使用。TL128資訊網(wǎng)——每日最新資訊28at.com

2. 實戰(zhàn)案例

2.1 引入依賴

<properties>  <lock4j.version>2.2.7</lock4j.version></properties><dependency>  <groupId>com.baomidou</groupId>  <artifactId>lock4j-redis-template-spring-boot-starter</artifactId>  <version>${lock4j.version}</version></dependency>

如果你想基于redisson或者是zookeeper實現(xiàn),那么你只需要引入對應(yīng)的包即可。TL128資訊網(wǎng)——每日最新資訊28at.com

<!-- redisson --><artifactId>lock4j-redisson-spring-boot-starter</artifactId><!-- zookeeper --><artifactId>lock4j-zookeeper-spring-boot-starter</artifactId>
配置文件
spring:  data:    redis:      timeout: 10000      connectTimeout: 20000      host: 127.0.0.1      password: xxxooo  #如果你是基于zookeeper實現(xiàn),那么做如下配置  coordinate:    zookeeper:      zkServers: 127.0.0.1:2181,...

進過以上的配置后接下來你就可以通過注解的方式使用分布式鎖了。TL128資訊網(wǎng)——每日最新資訊28at.com

2.2 基本使用

@Servicepublic class StorageService {  private final StorageRepository storageRepository ;  public StorageService(StorageRepository storageRepository) {    this.storageRepository = storageRepository ;  }  @Lock4j  public void deductStorage(Long storageId, int count) {    // TODO  }}

使用非常簡單,只需要在你需要上鎖的方法上添加@Lock4j注解即可。而這里將使用默認行為:默認獲取鎖超時3秒,30秒鎖過期。TL128資訊網(wǎng)——每日最新資訊28at.com

自定義鎖keyTL128資訊網(wǎng)——每日最新資訊28at.com

在上面示例中沒有自定義@Lock4j注解的任何屬性;那么,將會使用默認的key生成方式,上面的代碼將生成如下key。TL128資訊網(wǎng)——每日最新資訊28at.com

# 前綴 + ":" + 完全限定類名+方法名+# (這里的#是固定的,如果你自定義了key,會在后面繼續(xù)拼接)lock4j:com.pack.test.lock4j.StorageServicedeductStorage#

當我們自定義了key后如下:TL128資訊網(wǎng)——每日最新資訊28at.com

@Lock4j(key = "#storageId")public void deductStorage(Long storageId, int count)

key支持Spring SpEL表達式,如上將生成如下的keyTL128資訊網(wǎng)——每日最新資訊28at.com

# 方法調(diào)用storageService.deductStorage(1, 2) ;lock4j:com.pack.test.lock4j.StorageServicedeductStorage#1

你也可以不使用SpEL表達式。不使用SpEL表達式那么就需要使用如下語法TL128資訊網(wǎng)——每日最新資訊28at.com

@Lock4j(keys = "'storageId'")public void deductStorage(...) {}

沒有使用單引號程序?qū)箦e。TL128資訊網(wǎng)——每日最新資訊28at.com

設(shè)置過期時間TL128資訊網(wǎng)——每日最新資訊28at.com

默認獲取鎖超時3秒,30秒鎖過期,可以通過如下屬性配置過期時間TL128資訊網(wǎng)——每日最新資訊28at.com

@Lock4j(keys = {"#storageId"}, expire = 3000, acquireTimeout = 3000)public void deductStorage(Long storageId, int count) {}

expire: 鎖過期時間(毫秒);注:鎖過期時間必須要大于業(yè)務(wù)處理時間。acquireTimeout: 獲取鎖超時時間(毫秒)TL128資訊網(wǎng)——每日最新資訊28at.com

以上是Lock4j的基本用法;下面將介紹Lock4j其它高級用法。TL128資訊網(wǎng)——每日最新資訊28at.com

2.3 高級用法

全局統(tǒng)一配置TL128資訊網(wǎng)——每日最新資訊28at.com

lock4j:  acquire-timeout: 3000   expire: 30000  primary-executor: com.baomidou.lock.executor.RedisTemplateLockExecutor  lock-key-prefix: lock4j

primary-executor:配置加鎖的實現(xiàn)方式;默認順序是:
redisson > redisTemplate > zookeeper;如果你的環(huán)境中這3個都引入了,那么就是按照這個順序,因為定義他們時使用了@Order注解聲明順序。lock-key-prefix:#鎖前綴,如上面示例看到的lock4j為默認值。TL128資訊網(wǎng)——每日最新資訊28at.com

自定義執(zhí)行器(加鎖)TL128資訊網(wǎng)——每日最新資訊28at.com

我們可以通過實現(xiàn)LockExecutor接口定義自己的加鎖實現(xiàn),比如基于MySQL實現(xiàn)。如下:TL128資訊網(wǎng)——每日最新資訊28at.com

@Componentpublic class JdbcLockExecutor implements LockExecutor<String> {  private final JdbcTemplate jdbcTemplate ;  public JdbcLockExecutor(JdbcTemplate jdbcTemplate) {    this.jdbcTemplate = jdbcTemplate ;  }  @Override  public String acquire(String lockKey, String lockValue, long expire, long acquireTimeout) {    // TODO; 獲取鎖    return null ;  }  @Override  public boolean releaseLock(String key, String value, String lockInstance) {    // TODO; 釋放鎖    return false;  }}

注:這里必須要注冊為Spring Bean。否則將無法獲取。使用如下:TL128資訊網(wǎng)——每日最新資訊28at.com

@Lock4j(executor = JdbcLockExecutor.class)public void deductStorage(Long storageId, int count) {}

加鎖時會根據(jù)這里配置的executor Class對象獲取Spring容器對應(yīng)的bean對象。TL128資訊網(wǎng)——每日最新資訊28at.com

自定義key生成器TL128資訊網(wǎng)——每日最新資訊28at.com

Lock4j默認的鎖key生成器為DefaultLockKeyBuilder,我們可以通過LockKeyBuilder接口實現(xiàn)自己的key生成方式TL128資訊網(wǎng)——每日最新資訊28at.com

@Componentpublic class PackLockKeyBuilder implements LockKeyBuilder {  @Override  public String buildKey(MethodInvocation invocation, String[] definitionKeys) {    // TODO; 生成key    return null;  }}

注:這里也必須注冊為bean對象。使用如下:TL128資訊網(wǎng)——每日最新資訊28at.com

@Lock4j(keyBuilderStrategy = PackLockKeyBuilder.class)public void deductStorage(Long storageId, int count) {}

內(nèi)部會通過你這里配置的Class對象獲取對應(yīng)的Spring Bean實例對象。TL128資訊網(wǎng)——每日最新資訊28at.com

自定義獲取鎖失敗策略TL128資訊網(wǎng)——每日最新資訊28at.com

當獲取鎖失敗時如何進行處理?默認實現(xiàn)是DefaultLockFailureStrategy通過自定義LockFailureStrategy,實現(xiàn)自己的邏輯。與上面的套路一樣都需要注冊為bean。TL128資訊網(wǎng)——每日最新資訊28at.com

@Componentpublic class PackLockFailureStrategy implements LockFailureStrategy {  @Override  public void onLockFailure(String key, Method method, Object[] arguments) {    // TODO  }}

使用如下:TL128資訊網(wǎng)——每日最新資訊28at.com

@Lock4j(failStrategy = PackLockFailureStrategy.class)public void deductStorage(Long storageId, int count) {}

注:這里你也可以不指定failStrategy屬性,會自動從容器中查找對應(yīng)的實現(xiàn)Bean。TL128資訊網(wǎng)——每日最新資訊28at.com

非注解實現(xiàn)方式(手動加鎖/釋放鎖)TL128資訊網(wǎng)——每日最新資訊28at.com

你也可以通過注入LockTemplate對象,由自己來完成加鎖和釋放鎖的動作。TL128資訊網(wǎng)——每日最新資訊28at.com

private final LockTemplate lockTemplate ;  public StorageService(LockTemplate lockTemplate) {    this.lockTemplate = lockTemplate ;  }  public void deductStorage(Long storageId, int count) {    String key = "xxxx" ;    final LockInfo lockInfo = lockTemplate.lock(key, 30000L, 5000L, RedisTemplateLockExecutor.class);    if (null == lockInfo) {        throw new RuntimeException("業(yè)務(wù)處理中,請稍后再試") ;    }    // 獲取鎖成功,處理業(yè)務(wù)    try {        // TODO    } finally {        // 釋放鎖        lockTemplate.releaseLock(lockInfo) ;    }  }}

手動加鎖方式,一般適用于需要更細粒度控制鎖邊界,否則沒必要。TL128資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-100722-0.htmlSpringBoot強大的分布式鎖組件Lock4j,支持多種實現(xiàn)

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 編程范式,建議掌握這五種!

下一篇: 電商并發(fā)減庫存設(shè)計,如何做到不超賣

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
一区二区三区视频在线播放| 国产日产高清欧美一区二区三区| 久久久人成影片一区二区三区| 欧美一区亚洲一区| 久久久久久69| 欧美韩国在线| 国产精品久久久久久一区二区三区| 国产麻豆精品久久一二三| 狠狠干综合网| 日韩一级精品视频在线观看| 亚洲天堂免费观看| 久久久免费精品| 欧美女同视频| 国产精品久久国产三级国电话系列| 国产午夜精品视频免费不卡69堂| 亚洲电影免费| 亚洲欧美国产精品va在线观看 | 国产一区二区三区成人欧美日韩在线观看| 红桃视频一区| 99精品热视频只有精品10| 欧美一区二区三区在线视频| 男女精品网站| 国产精品稀缺呦系列在线| 亚洲国产精品久久久久久女王| 亚洲图片你懂的| 蜜臀久久99精品久久久画质超高清 | 国产精品久久看| 一区三区视频| 亚洲一区二区三区中文字幕在线| 久久久免费av| 欧美午夜剧场| 亚洲国产另类久久精品| 校园激情久久| 欧美日韩国产成人高清视频| 国内精品久久久久久| 亚洲视频在线播放| 欧美国产精品日韩| 好看不卡的中文字幕| 亚洲天堂男人| 欧美风情在线观看| 韩国一区二区三区美女美女秀| 在线中文字幕日韩| 欧美成人精品三级在线观看| 国产欧美日韩一区二区三区| 99re8这里有精品热视频免费| 久久久亚洲高清| 国产伦精品一区二区三区免费| 亚洲精品免费一区二区三区| 久久精品免费看| 国产精品麻豆欧美日韩ww| 亚洲精品一区二| 另类专区欧美制服同性| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲欧美日韩国产成人精品影院| 欧美国产日韩免费| 在线观看久久av| 午夜日韩在线| 国产精品豆花视频| 99在线|亚洲一区二区| 麻豆成人精品| 国内精品写真在线观看| 亚欧美中日韩视频| 国产精品一二三| 亚洲一线二线三线久久久| 欧美日韩在线视频首页| 亚洲精品一区二区三区婷婷月| 美女视频黄免费的久久| 亚洲盗摄视频| 免费观看成人网| 尤物99国产成人精品视频| 久久精品中文字幕一区二区三区| 国产欧美日韩免费| 亚洲欧美在线观看| 国产精品素人视频| 亚洲欧美日韩视频二区| 国产精品日韩高清| 午夜在线a亚洲v天堂网2018| 国产精品久久久久aaaa| 亚洲永久免费观看| 国产精品色在线| 午夜日韩在线观看| 国产日本欧美一区二区三区| 午夜精品久久久久久久99黑人 | 日韩视频中午一区| 欧美精品粉嫩高潮一区二区| 亚洲精品久久久久中文字幕欢迎你| 欧美a级片网| 亚洲激情第一页| 欧美精品在线一区二区| 亚洲免费av网站| 欧美日产一区二区三区在线观看| 99国产精品视频免费观看一公开| 欧美精品一区二| 9国产精品视频| 欧美体内谢she精2性欧美| 夜夜嗨网站十八久久| 国产精品国产三级国产aⅴ无密码| 亚洲一区二区在线免费观看| 国产精品视频免费观看www| 欧美一区二区三区四区高清| 韩日精品在线| 农夫在线精品视频免费观看| 亚洲精品久久7777| 国产精品成人v| 久久精品91久久香蕉加勒比| 黄色精品一二区| 欧美激情一区二区三级高清视频 | 亚洲作爱视频| 国产精品欧美久久| 久久国产黑丝| 亚洲国产毛片完整版| 欧美日韩亚洲三区| 亚洲欧美在线免费| 激情欧美国产欧美| 欧美极品色图| 宅男在线国产精品| 国产日韩一区在线| 免费欧美日韩| 在线视频精品一| 国产视频观看一区| 免费短视频成人日韩| 一本久道久久综合婷婷鲸鱼| 国产乱码精品| 欧美成人r级一区二区三区| 国产精品99久久不卡二区| 国产午夜精品久久| 欧美国产日韩在线观看| 亚洲欧美久久| 亚洲国产精品一区二区第一页 | 欧美理论视频| 欧美一区视频| 亚洲精品色婷婷福利天堂| 国产精品久久久久婷婷| 久久免费黄色| 中文一区二区| 伊人影院久久| 欧美日韩中文字幕在线视频| 久久国产手机看片| 日韩网站免费观看| 国产一区在线免费观看| 欧美日韩另类国产亚洲欧美一级| 欧美在线不卡| 亚洲伦理自拍| 国内精品嫩模av私拍在线观看| 欧美日韩午夜| 久久亚洲欧美国产精品乐播| 亚洲午夜国产一区99re久久| 1000精品久久久久久久久| 国产精品草莓在线免费观看| 奶水喷射视频一区| 性欧美超级视频| 99热在这里有精品免费| 伊人蜜桃色噜噜激情综合| 欧美性开放视频| 欧美mv日韩mv国产网站app| 性欧美xxxx视频在线观看| 亚洲免费观看高清完整版在线观看| 国产午夜精品一区二区三区欧美| 欧美日韩免费观看一区三区 | 久久亚洲综合网| 亚洲一区二区三区四区五区午夜 | 国产精品a久久久久久| 欧美国产极速在线| 久久精品最新地址| 亚洲欧美精品在线观看| 亚洲免费观看高清完整版在线观看熊 | 亚洲韩国日本中文字幕| 国产亚洲欧美一区二区三区| 欧美日韩一区二区精品| 免费成人高清在线视频| 欧美伊人影院| 亚洲中字黄色| 999在线观看精品免费不卡网站| 在线免费观看日韩欧美| 国产亚洲精品v| 国产精品综合视频| 国产精品第2页| 欧美日韩一区二区三区在线| 欧美v国产在线一区二区三区| 久久激情综合| 欧美有码视频| 小黄鸭精品aⅴ导航网站入口| 亚洲婷婷综合色高清在线| 99国产精品久久| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美视频成人| 欧美日本一道本在线视频| 欧美成人精品不卡视频在线观看| 久久综合999| 久久动漫亚洲| 欧美一区二区三区四区高清| 亚洲综合社区| 亚洲一区在线免费| 亚洲在线视频免费观看| 亚洲永久在线| 亚洲一区影音先锋| 亚洲欧美卡通另类91av| 亚洲天堂免费观看| 亚洲在线一区二区三区| 亚洲一区二区三区免费观看| 亚洲一二三区在线| 亚洲永久免费av| 亚洲欧美日韩一区在线| 亚洲欧美日韩一区二区|