摘要:下面给大家介绍JAVA语言的springboot整合ehcache 实现支付超时限制的方法,具体内容如下所示,希望对大家学习JAVA语言有所帮助。
下面给大家介绍JAVA语言的springboot整合ehcache 实现支付超时限制的方法,具体内容如下所示,希望对大家学习JAVA语言有所帮助。
复制代码
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())。
总结
以上就是职坐标整理发布关于JAVA的介绍,先祝大家对它有了一定的了解吧,了解更多内容,请关注职坐标编程语言JAVA频道!
擅长针对企业软件开发的产品设计及开发的细节与流程设计课程内容。座右铭:大道至简!
已有23人表明态度,87%喜欢该老师!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号