时间:2021-05-19
下面给大家介绍springboot整合ehcache 实现支付超时限制的方法,具体内容如下所示:
<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类标注@EnableCaching
实现核心代码
/* * 记录用户支付的时间戳 */public void pinUser(Object userKey) throws Exception{ Cache cache = manager.getCache(cacheName); Element element = cache.get(userKey); if(element == null){ Element newE = new Element(userKey, new Date().getTime()); cache.put(newE); } else { long inTime = (Long) element.getObjectValue(); long timeToWait = (getTimeToLive() - (new Date().getTime() - inTime)/1000); //提示需要等待的时间 throw new Exception(String.format("还需等待%s秒",String.valueOf(timeToWait))); }}/* * 删除用户支付的时间戳(该方法用于系统内部支付失败时,手动去掉用户的支付记录,从而不影响用户再次尝试) * 正常时候不应该调用该方法,而是应该等缓存超时后自动清除 */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();}使用
在调用支付接口的地方调用PayToken.getInstance().pinUser(user.getKey())即可,若抛出异常,即说明支付间隔时间太小,同时如果还有附加数据操作,抛出异常亦可以触发回滚操作。
若是系统原因导致执行失败而仍需用户等待是不合理的,因此增加了解除用户记录的方法PayToken.getInstance().unPinUser(user.getKey())。
总结
以上所述是小编给大家介绍的springboot整合ehcache 实现支付超时限制的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Nodejs回调加超时限制两种实现方法Nodejs下的IO操作都是异步的,有时候异步请求返回太慢,不想无限等待回调怎么办呢?我们可以给回调函数加一个超时限制,到
本文实例讲述了php页面函数设置超时限制的方法。分享给大家供大家参考。具体方法如下:碰到页面程序执行超时时会提醒Fatalerror:Maximumexecut
php可以通过set_time_limit(0);来取消php脚步超时限制,从而达到长连接的效果。例子代码如下:复制代码代码如下:示例代码2:复制代码代码如下:
本文讲解SpringBoot与EhCache的整合。1EhCache简介EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernat
背景介绍开发中遇到了一个需求:程序运行到某处时需要用户确认,但不能一直傻等,后面的程序不能被一直阻塞,需要有个超时限制,也就是这个程序如果在一段时间后还没有得到