springboot整合ehcache 實(shí)現(xiàn)支付超時(shí)限制的方法
下面給大家介紹springboot整合ehcache 實(shí)現(xiàn)支付超時(shí)限制的方法,具體內(nèi)容如下所示:
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.6.11</version> </dependency>
pom文件中引入ehcache依賴
在類路徑下存放ehcache.xml文件。
application.xml中指定:
spring: cache: jcache: config: classpath:ehcache.xml
類標(biāo)注@EnableCaching
實(shí)現(xiàn)核心代碼
/*
* 記錄用戶支付的時(shí)間戳
*/
public void pinUser(Object userKey) throws Exception{
Cache cache = manager.getCache(cacheName);
Element element = cache.get(userKey);
if(element == null){
/*如果沒有找到用戶的支付記錄,則記錄緩存,然后繼續(xù)*/
Element newE = new Element(userKey, new Date().getTime());
cache.put(newE);
} else {
/*如果存在用戶的支付記錄,則應(yīng)該拋出異常,并提示用戶相應(yīng)的信息*/
long inTime = (Long) element.getObjectValue();
long timeToWait = (getTimeToLive() - (new Date().getTime() - inTime)/1000);
//提示需要等待的時(shí)間
throw new Exception(String.format("還需等待%s秒",String.valueOf(timeToWait)));
}
}
/*
* 刪除用戶支付的時(shí)間戳(該方法用于系統(tǒng)內(nèi)部支付失敗時(shí),手動(dòng)去掉用戶的支付記錄,從而不影響用戶再次嘗試)
* 正常時(shí)候不應(yīng)該調(diào)用該方法,而是應(yīng)該等緩存超時(shí)后自動(dòng)清除
*/
public void unPinUser(Object userKey) {
Cache cache = manager.getCache(cacheName);
cache.remove(userKey);
}
/*
* 獲取緩存配置,用來換算用戶還需等待的時(shí)間,從而給出較為友好的等待時(shí)間提示。
*/
private long getTimeToLive(){
Cache cache = manager.getCache(cacheName);
return cache.getCacheConfiguration().getTimeToLiveSeconds();
}
使用
在調(diào)用支付接口的地方調(diào)用PayToken.getInstance().pinUser(user.getKey())即可,若拋出異常,即說明支付間隔時(shí)間太小,同時(shí)如果還有附加數(shù)據(jù)操作,拋出異常亦可以觸發(fā)回滾操作。
若是系統(tǒng)原因?qū)е聢?zhí)行失敗而仍需用戶等待是不合理的,因此增加了解除用戶記錄的方法PayToken.getInstance().unPinUser(user.getKey())。
總結(jié)
以上所述是小編給大家介紹的springboot整合ehcache 實(shí)現(xiàn)支付超時(shí)限制的方法,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼+redis限制發(fā)送的次數(shù)功能
這篇文章主要介紹了Java實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼+redis限制發(fā)送的次數(shù),本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
Java貪心算法之Prime算法原理與實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Java貪心算法之Prime算法原理與實(shí)現(xiàn)方法,簡(jiǎn)單描述了Prime算法的概念、原理、實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2017-09-09
聊聊Spring Boot 如何集成多個(gè) Kafka
這篇文章主要介紹了Spring Boot 集成多個(gè) Kafka的相關(guān)資料,包括配置文件,生成者和消費(fèi)者配置過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-10-10
Java中在控制臺(tái)讀取字符的實(shí)現(xiàn)示例
Scanner是Java中的一個(gè)類,可以用于讀取控制臺(tái)輸入,通過Scanner對(duì)象可以方便地從控制臺(tái)讀取數(shù)字或字符串,本文就來介紹一下Java中在控制臺(tái)讀取字符的實(shí)現(xiàn)示例,感興趣的可以了解一下2023-10-10
使用kafka-console-consumer.sh不停報(bào)WARN的問題及解決
這篇文章主要介紹了使用kafka-console-consumer.sh不停報(bào)WARN的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03
Spring?Data?JPA查詢方式及方法名查詢規(guī)則介紹
這篇文章主要介紹了Spring?Data?JPA查詢方式及方法名查詢規(guī)則,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11

