目錄
一:簡(jiǎn)介
二:框架優(yōu)點(diǎn)
1.統(tǒng)一的調(diào)用api
2.統(tǒng)一的lock句柄獲取api
3.多廠商實(shí)現(xiàn)切換
4.多廠商不同類(lèi)型lock同時(shí)使用
5.多廠商實(shí)現(xiàn)擴(kuò)展
6.lock增強(qiáng)
(1)本地lock預(yù)鎖
(2)事務(wù)感知
7.注解式lock支持
(1)提供的lock注解
(2)業(yè)務(wù)策略及自定義策略
8.方法級(jí)定制以及全局定制能力
一:簡(jiǎn)介
lock框架是解決java lock領(lǐng)域的一種通用框架,基于spring boot框架starter集成機(jī)制,可以通過(guò)簡(jiǎn)單的依賴(lài)配置,快速實(shí)現(xiàn)集成,此篇主要介紹設(shè)計(jì)思路,不關(guān)心的直接具體見(jiàn)通用lock框架集成及具體配置使用-CSDN博客
二:框架優(yōu)點(diǎn)
1.統(tǒng)一的調(diào)用api
基于java 的Lock接口作為標(biāo)準(zhǔn),可以使用本地的ReentantLock,ReentrantReadWriteLock.WriteLock以及Redission相關(guān)的RedissonLock,RedissonReadLock 等接口的實(shí)現(xiàn)
|
2.統(tǒng)一的lock句柄獲取api
基于Spring的LockRegistry標(biāo)準(zhǔn),可以使用包括Spring自帶的RedisLockRegistry以及其他實(shí)現(xiàn)此標(biāo)準(zhǔn)的LockRegistry
|
LockRegistry obtain返回的Lock為java的Lock標(biāo)準(zhǔn)
3.多廠商實(shí)現(xiàn)切換
標(biāo)準(zhǔn)的高度統(tǒng)一,為靈活的切換不同的lock實(shí)現(xiàn)提供的支持??蚣茴A(yù)置了如下實(shí)現(xiàn)類(lèi)型的定義
|
其中本地實(shí)現(xiàn)以及redission實(shí)現(xiàn)框架已經(jīng)支持
4.多廠商不同類(lèi)型lock同時(shí)使用
|
配置類(lèi)型 |
配置名 |
作用域 |
---|---|---|
LockImplementer |
implementer |
全局及注解 |
LockType |
lockType |
注解 |
5.多廠商實(shí)現(xiàn)擴(kuò)展
框架允許基于Spring的標(biāo)準(zhǔn)LockRegistry擴(kuò)展自定義的LockRegistry實(shí)現(xiàn),當(dāng)然Lock同樣可以,通用Lock框架也基于這兩個(gè)標(biāo)準(zhǔn)進(jìn)行擴(kuò)展的,并定義了本框架的擴(kuò)展標(biāo)準(zhǔn),實(shí)現(xiàn)一下以下接口后,僅需通過(guò)少量配置即直接可在框架中生效,而無(wú)需更改邏輯調(diào)用代碼
|
|
6.lock增強(qiáng)
在java Lock定義的能力之外,框架提供了兩個(gè)增強(qiáng)能力
(1)本地lock預(yù)鎖
lock的上鎖會(huì)先在本地進(jìn)行預(yù)上鎖,本地上鎖成功才會(huì)真正調(diào)用實(shí)際的分布式鎖。如果本地失敗則直接快速失敗
(2)事務(wù)感知
基于注解事務(wù),內(nèi)部使用lock可能會(huì)發(fā)生鎖釋放了但是當(dāng)前事務(wù)還沒(méi)提交的情況,此時(shí)lock將會(huì)失效。lock框架可感知上下文的事務(wù),并提供了此情況發(fā)生時(shí)相應(yīng)的策略
|
開(kāi)發(fā)者可以根據(jù)自己的業(yè)務(wù)需要使用。本地緩存及事務(wù)感知能力同樣可作用于自定義的lock(基于包裝實(shí)現(xiàn))
7.注解式lock支持
框架實(shí)現(xiàn)了基于注解式的lock支持
(1)提供的lock注解
注解 |
簡(jiǎn)介 |
其他 |
---|---|---|
@FailFastLock | 快速失敗的lock | |
@LocalLock | JVM實(shí)現(xiàn)的lock | |
@Lock | 頂層lock注解,支持所有策略及配置參數(shù) |
@FailFastLock 和@LocalLock都是基于@Lock實(shí)現(xiàn)的,擴(kuò)展注解主要是為了更好的語(yǔ)義以及使用體驗(yàn),而無(wú)需指定多余的配置。比如@FailFastLock 就不用配置等待時(shí)間,因?yàn)榈却龝r(shí)間是0
|
(2)業(yè)務(wù)策略及自定義策略
lock從獲取句柄,到加鎖并執(zhí)行邏輯代碼,最后解鎖這個(gè)過(guò)程可能出現(xiàn)各種異常情況,注解提供了對(duì)于以上情況的處理能力
備注:當(dāng)作用域?yàn)槿旨白⒔鈺r(shí),注解的優(yōu)先級(jí)高于全局的設(shè)置
策略點(diǎn) |
策略名 |
可選作用域 |
具體策略 |
---|---|---|---|
加鎖失敗的處理策略 | lockFailStrategy |
全局及注解 | 1.NO_OPERATION:繼續(xù)執(zhí)行業(yè)務(wù)邏輯,不做任何處理 2.FAIL_FAST:快速失敗 3.KEEP_ACQUIRE:一直阻塞,直到獲得鎖,在太多的嘗試后,仍會(huì)報(bào)錯(cuò) 4.CUSTOMER: 自定義,用于全局默認(rèn)處理 |
定制的加鎖失敗的處理策略 | customLockFailStrategy | 注解 | 用戶指定,格式為方法的全限定名稱(chēng) |
加鎖異常的處理策略 | lockExceptionStrategy |
全局及注解 | 1.THROW_EXCEPTION:拋出異常 2.CUSTOMER:自定義,用于全局默認(rèn)處理 |
釋放鎖時(shí)報(bào)錯(cuò)的處理策略 | releaseTimeoutStrategy |
全局及注解 | 1.NO_OPERATION:繼續(xù)執(zhí)行業(yè)務(wù)邏輯,不做任何處理 2.FAIL_FAST:快速失敗,可自定義異常類(lèi)及報(bào)錯(cuò)信息 3.CUSTOMER: 自定義,用于全局默認(rèn)處理 |
自定義釋放鎖時(shí)已超時(shí)的處理策略 | customReleaseTimeout Strategy |
全局及注解 | 用戶指定,格式為方法的全限定名稱(chēng) |
獲取鎖失敗時(shí),報(bào)錯(cuò)的異常類(lèi)型 | 無(wú) | 全局及注解 | 按照用戶指定異常類(lèi)型報(bào)錯(cuò) |
獲取鎖失敗時(shí),報(bào)錯(cuò)的錯(cuò)誤信息 | 無(wú) | 全局及注解 | 按照用戶指定異常信息報(bào)錯(cuò) |
8.方法級(jí)定制以及全局定制能力
框架設(shè)計(jì)時(shí)考慮到用戶的自定義需求,提供了方法級(jí)定制以及全局定制的能力,以上的策略中,lockFailStrategy,lockExceptionStrategy,releaseTimeoutStrategy 都提供了CUSTOMER的的策略,框架通過(guò)java的SPI機(jī)制,將對(duì)應(yīng)的用戶自實(shí)現(xiàn)的策略加載
策略點(diǎn) |
策略名 |
具體配置名 |
擴(kuò)展定義接口 |
---|---|---|---|
加鎖失敗的處理策略 | lockFailStrategy | CUSTOMER | cn.techwolf.blue.usl.framework.lock.handler.lock.ExceptionOnLockCustomerHandler |
加鎖異常的處理策略 | lockExceptionStrategy | CUSTOMER | cn.techwolf.blue.usl.framework.lock.handler.lock.FailOnLockCustomerHandler |
加鎖釋放鎖異常的處理策略 | releaseTimeoutStrategy | CUSTOMER | cn.techwolf.blue.usl.framework.lock.handler.release.ReleaseTimeoutCustomerHandler |
自定義處理策略加載后,如果需要指定為全局,需要在全局配置中指定定位的策略名的配置為CUSTOMER即可開(kāi)啟,方法級(jí)同理文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-822737.html
注意:無(wú)論是全局還是注解的方法級(jí),一旦指定以上策略的配置為CUSTOMER,則系統(tǒng)運(yùn)行時(shí)必須存在對(duì)應(yīng)的實(shí)現(xiàn)類(lèi),否則報(bào)錯(cuò)。不同的是,全局級(jí)配置報(bào)錯(cuò)將導(dǎo)致項(xiàng)目無(wú)法啟動(dòng)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-822737.html
到了這里,關(guān)于[框架系列]-[通用lock框架] 介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!