查看: 1512|回复: 0

[Java代码] springboot整合ehcache 实现支付超时限制的方法

发表于 2018-2-25 08:00:00

下面给大家介绍springboot整合ehcache 实现支付超时限制的方法,具体内容如下所示:

  1. <dependency>
  2. <groupId>net.sf.ehcache</groupId>
  3. <artifactId>ehcache-core</artifactId>
  4. <version>2.6.11</version>
  5. </dependency>
复制代码

pom文件中引入ehcache依赖

在类路径下存放ehcache.xml文件。

application.xml中指定:

  1. spring:
  2. cache:
  3. jcache:
  4. config: classpath:ehcache.xml
复制代码

类标注@EnableCaching

实现核心代码

  1. /*
  2. * 记录用户支付的时间戳
  3. */
  4. public void pinUser(Object userKey) throws Exception{
  5. Cache cache = manager.getCache(cacheName);
  6. Element element = cache.get(userKey);
  7. if(element == null){
  8. /*如果没有找到用户的支付记录,则记录缓存,然后继续*/
  9. Element newE = new Element(userKey, new Date().getTime());
  10. cache.put(newE);
  11. } else {
  12. /*如果存在用户的支付记录,则应该抛出异常,并提示用户相应的信息*/
  13. long inTime = (Long) element.getObjectValue();
  14. long timeToWait = (getTimeToLive() - (new Date().getTime() - inTime)/1000);
  15. //提示需要等待的时间
  16. throw new Exception(String.format("还需等待%s秒",String.valueOf(timeToWait)));
  17. }
  18. }
  19. /*
  20. * 删除用户支付的时间戳(该方法用于系统内部支付失败时,手动去掉用户的支付记录,从而不影响用户再次尝试)
  21. * 正常时候不应该调用该方法,而是应该等缓存超时后自动清除
  22. */
  23. public void unPinUser(Object userKey) {
  24. Cache cache = manager.getCache(cacheName);
  25. cache.remove(userKey);
  26. }
  27. /*
  28. * 获取缓存配置,用来换算用户还需等待的时间,从而给出较为友好的等待时间提示。
  29. */
  30. private long getTimeToLive(){
  31. Cache cache = manager.getCache(cacheName);
  32. return cache.getCacheConfiguration().getTimeToLiveSeconds();
  33. }
复制代码

使用

在调用支付接口的地方调用PayToken.getInstance().pinUser(user.getKey())即可,若抛出异常,即说明支付间隔时间太小,同时如果还有附加数据操作,抛出异常亦可以触发回滚操作。

若是系统原因导致执行失败而仍需用户等待是不合理的,因此增加了解除用户记录的方法PayToken.getInstance().unPinUser(user.getKey())。

总结

以上所述是小编给大家介绍的springboot整合ehcache 实现支付超时限制的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对程序员之家网站的支持!



回复

使用道具 举报