springboot整合ehcache 实现支付超时限制的方法
下面给大家介绍springboot整合ehcache实现支付超时限制的方法,具体内容如下所示:
net.sf.ehcache ehcache-core 2.6.11
pom文件中引入ehcache依赖
在类路径下存放ehcache.xml文件。
application.xml中指定:
spring: cache: jcache: config:classpath:ehcache.xml
类标注@EnableCaching
实现核心代码
/* *记录用户支付的时间戳 */ publicvoidpinUser(ObjectuserKey)throwsException{ Cachecache=manager.getCache(cacheName); Elementelement=cache.get(userKey); if(element==null){ /*如果没有找到用户的支付记录,则记录缓存,然后继续*/ ElementnewE=newElement(userKey,newDate().getTime()); cache.put(newE); }else{ /*如果存在用户的支付记录,则应该抛出异常,并提示用户相应的信息*/ longinTime=(Long)element.getObjectValue(); longtimeToWait=(getTimeToLive()-(newDate().getTime()-inTime)/1000); //提示需要等待的时间 thrownewException(String.format("还需等待%s秒",String.valueOf(timeToWait))); } } /* *删除用户支付的时间戳(该方法用于系统内部支付失败时,手动去掉用户的支付记录,从而不影响用户再次尝试) *正常时候不应该调用该方法,而是应该等缓存超时后自动清除 */ publicvoidunPinUser(ObjectuserKey){ Cachecache=manager.getCache(cacheName); cache.remove(userKey); } /* *获取缓存配置,用来换算用户还需等待的时间,从而给出较为友好的等待时间提示。 */ privatelonggetTimeToLive(){ Cachecache=manager.getCache(cacheName); returncache.getCacheConfiguration().getTimeToLiveSeconds(); }
使用
在调用支付接口的地方调用PayToken.getInstance().pinUser(user.getKey())即可,若抛出异常,即说明支付间隔时间太小,同时如果还有附加数据操作,抛出异常亦可以触发回滚操作。
若是系统原因导致执行失败而仍需用户等待是不合理的,因此增加了解除用户记录的方法PayToken.getInstance().unPinUser(user.getKey())。
总结
以上所述是小编给大家介绍的springboot整合ehcache实现支付超时限制的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。