springboot整合ehcache 实现支付超时限制的方法

所属分类: 软件编程 / java 阅读数: 24
收藏 0 赞 0 分享

下面给大家介绍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 实现支付超时限制的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多精彩内容其他人还在看

Java基础之反射原理与用法详解

这篇文章主要介绍了Java基础之反射原理与用法,结合实例形式详细分析了java反射的相关概念、原理、使用方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

java字符串的截取方法substring()代码解析

这篇文章主要介绍了java字符串的截取方法substring()代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Mybatis一对多关联关系映射实现过程解析

这篇文章主要介绍了Mybatis一对多关联关系映射实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java整数和字符串相互转化实例详解

这篇文章主要介绍了Java整数和字符串相互转化实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring Boot 项目设置网站图标的方法

这篇文章主要介绍了Spring Boot 项目设置网站图标的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java多态机制原理特点详解

在本篇文章里小编给大家分享的是关于java多态机制原理特点详解,有需要的朋友们可以跟着学习下。
收藏 0 赞 0 分享

Jmeter如何添加循环控制器

这篇文章主要介绍了Jmeter如何添加循环控制器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java虚拟机创建失败的原因整理

在本篇文章里小编给大家整理了关于创建java虚拟机失败的解决方法和知识点,需要的朋友们可以参考学习下。
收藏 0 赞 0 分享

Java如何把int类型转换成byte

这篇文章主要介绍了Java如何把int类型转换成byte,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

linux中java获取路径的实例代码

在本篇文章里小编给大家整理的是一篇关于linux中java获取路径的实例代码以及相关知识点,有兴趣的朋友们可以学习参考下。
收藏 0 赞 0 分享
查看更多