溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

springboot整合ehcache 實(shí)現(xiàn)支付超時限制的方法

發(fā)布時間:2020-10-09 04:57:39 來源:腳本之家 閱讀:329 作者:zhanglin0506 欄目:編程語言

下面給大家介紹springboot整合ehcache 實(shí)現(xiàn)支付超時限制的方法,具體內(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)核心代碼

/*
 * 記錄用戶支付的時間戳
 */
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);
    //提示需要等待的時間
    throw new Exception(String.format("還需等待%s秒",String.valueOf(timeToWait)));
  }
}
/*
 * 刪除用戶支付的時間戳(該方法用于系統(tǒng)內(nèi)部支付失敗時,手動去掉用戶的支付記錄,從而不影響用戶再次嘗試)
 * 正常時候不應(yīng)該調(diào)用該方法,而是應(yīng)該等緩存超時后自動清除
 */
public void unPinUser(Object userKey) {
  Cache cache = manager.getCache(cacheName);
  cache.remove(userKey);
}
/*
 * 獲取緩存配置,用來換算用戶還需等待的時間,從而給出較為友好的等待時間提示。
 */
private long getTimeToLive(){
  Cache cache = manager.getCache(cacheName);
  return cache.getCacheConfiguration().getTimeToLiveSeconds();
}

使用

在調(diào)用支付接口的地方調(diào)用PayToken.getInstance().pinUser(user.getKey())即可,若拋出異常,即說明支付間隔時間太小,同時如果還有附加數(shù)據(jù)操作,拋出異常亦可以觸發(fā)回滾操作。

若是系統(tǒng)原因?qū)е聢?zhí)行失敗而仍需用戶等待是不合理的,因此增加了解除用戶記錄的方法PayToken.getInstance().unPinUser(user.getKey())。

總結(jié)

以上所述是小編給大家介紹的springboot整合ehcache 實(shí)現(xiàn)支付超時限制的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對億速云網(wǎng)站的支持!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI