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í),手動去掉用戶的支付記錄,從而不影響用戶再次嘗試) * 正常時(shí)候不應(yīng)該調(diào)用該方法,而是應(yīng)該等緩存超時(shí)后自動清除 */ 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í)限制的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
application.yml文件中如何開啟mybatis自動駝峰映射
這篇文章主要介紹了application.yml文件中開啟mybatis自動駝峰映射的方法,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08深入淺析Mybatis與Hibernate的區(qū)別與用途
這篇文章主要介紹了Mybatis與Hibernate的區(qū)別與用途的相關(guān)資料,需要的朋友可以參考下2017-10-10JAVA開發(fā)中的一些規(guī)范講解(阿里巴巴Java開發(fā)規(guī)范手冊)
這篇文章主要介紹了JAVA開發(fā)中的一些規(guī)范講解(阿里巴巴Java開發(fā)規(guī)范手冊),需要的朋友可以參考下2018-04-04深入理解spring boot異步調(diào)用方式@Async
Spring為任務(wù)調(diào)度與異步方法執(zhí)行提供了注解支持。通過在方法上設(shè)置@Async注解,可使得方法被異步調(diào)用。下面這篇文章主要給大家介紹了關(guān)于spring boot異步調(diào)用方式@Async的相關(guān)資料,需要的朋友可以參考下。2017-07-07Java進(jìn)階核心之InputStream流深入講解
這篇文章主要給大家介紹了關(guān)于Java進(jìn)階核心之InputStream流的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02java調(diào)用js文件的兩種常用方法示例(支持V8引擎)
在Java中調(diào)用JavaScript的方法通常涉及到使用Java的腳本引擎,下面這篇文章主要給大家介紹了關(guān)于java調(diào)用js文件的兩種常用方法(支持V8引擎)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06