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

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

您可能感兴趣的文章:

  • springboot+EHcache 实现文章浏览量的缓存和超时更新
  • 详解spring boot集成ehcache 2.x 用于hibernate二级缓存
  • 详解SpringBoot缓存的实例代码(EhCache 2.x 篇)
  • Spring Boot缓存实战 EhCache示例
  • springboot整合EHCache的实践方案
  • spring-boot整合ehcache实现缓存机制的方法
时间: 2018-01-17

spring-boot整合ehcache实现缓存机制的方法

EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. ehcache提供了多种缓存策略,主要分为内存和磁盘两级,所以无需担心容量问题. spring-boot是一个快速的集成框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 由于spring-boot无需任何样板化的配置文件,所以spring-boot集成一些其他框架时会有略微的

详解SpringBoot缓存的实例代码(EhCache 2.x 篇)

本篇介绍了SpringBoot 缓存(EhCache 2.x 篇),分享给大家,具体如下: SpringBoot 缓存 在 spring Boot中,通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者: Generic JCache (JSR-107) EhCache 2.x Hazelcast Infinispan Redis Guava Simple 关于 Spring Boot 的缓存机制: 高速

springboot整合EHCache的实践方案

EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. ehcache提供了多种缓存策略,主要分为内存和磁盘两级,所以无需担心容量问题. spring-boot是一个快速的集成框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 用户登录之后,几乎之后展示任何页面都需要显示一下用户信息.可以在用户登录成功之后将用户信息进行缓存,之后直

springboot+EHcache 实现文章浏览量的缓存和超时更新

问题描述 当我们需要统计文章的浏览量的时候,最常规的做法就是: 1.访问文章链接www.abc.com/article/{id} 2.在控制层获取Article实体 3.得到文章浏览量count并且count++ 4.最后update实体Article. 这么做对没有访问量的网站来说很棒,如果网站访问量很大,这么不停的读写数据库,会对服务器造成很大的压力. 解决思路 引入Ehcache,将文章的访问量存在cache中,每点击一次文章,将cache中的count加1.在有效的时间内访问文章只是将c

详解spring boot集成ehcache 2.x 用于hibernate二级缓存

本文将介绍如何在spring boot中集成ehcache作为hibernate的二级缓存.各个框架版本如下 spring boot:1.4.3.RELEASE spring framework: 4.3.5.RELEASE hibernate:5.0.1.Final(spring-boot-starter-data-jpa默认依赖) ehcache:2.10.3 项目依赖 <dependency> <groupId>org.springframework.boot</gro

Spring Boot缓存实战 EhCache示例

Spring boot默认使用的是SimpleCacheConfiguration,即使用ConcurrentMapCacheManager来实现缓存.但是要切换到其他缓存实现也很简单 pom文件 在pom中引入相应的jar包 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web<

Spring Boot缓存实战 Caffeine示例

Caffeine和Spring Boot集成 Caffeine是使用Java8对Guava缓存的重写版本,在Spring Boot 2.0中将取代Guava.如果出现Caffeine,CaffeineCacheManager将会自动配置.使用spring.cache.cache-names属性可以在启动时创建缓存,并可以通过以下配置进行自定义(按顺序): spring.cache.caffeine.spec: 定义的特殊缓存 com.github.benmanes.caffeine.cache.

Spring Boot 2 实战:自定义启动运行逻辑实例详解

本文实例讲述了Spring Boot 2 实战:自定义启动运行逻辑.分享给大家供大家参考,具体如下: 1. 前言 不知道你有没有接到这种需求,项目启动后立马执行一些逻辑.比如缓存预热,或者上线后的广播之类等等.可能现在没有但是将来会有的.想想你可能的操作, 写个接口上线我调一次行吗?NO!NO!NO!这种初级菜鸟才干的事.今天告诉你个骚操作使得你的代码更加优雅,逼格更高. 2. CommandLineRunner 接口 package org.springframework.boot; impo

spring boot整合hessian的示例

首先添加hessian依赖 <dependency> <groupId>com.caucho</groupId> <artifactId>hessian</artifactId> <version>4.0.38</version> </dependency> 服务端:HessianServer,端口号:8090 public interface HelloWorldService { String sayHel

spring boot整合Swagger2的示例代码

Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步.Swagger 让部署管理和使用功能强大的API从未如此简单. 1.代码示例 1).在pom.xml文件中引入Swagger2 <dependency> <groupId>io.springfox</groupId> <artifa

Spring Boot集成Kafka的示例代码

本文介绍了Spring Boot集成Kafka的示例代码,分享给大家,也给自己留个笔记 系统环境 使用远程服务器上搭建的kafka服务 Ubuntu 16.04 LTS kafka_2.12-0.11.0.0.tgz zookeeper-3.5.2-alpha.tar.gz 集成过程 1.创建spring boot工程,添加相关依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu

Spring Boot 简单使用EhCache缓存框架的方法

我的环境是Gradle + Kotlin + Spring Boot,这里介绍EhCache缓存框架在Spring Boot上的简单应用. 在build.gradle文件添加依赖 compile("org.springframework.boot:spring-boot-starter-cache") compile("net.sf.ehcache:ehcache") 修改Application的配置,增加@EnableCaching配置 @MapperScan(&

Spring Boot如何使用EhCache演示

一.EhCache使用演示 EhCache是一个纯Java的进程内缓存框架,具有快速.精干等特点,Hibernate中的默认Cache就是使用的EhCache. 本章节示例是在Spring Boot集成Spring Cache的源码基础上进行改造.源码地址:https://github.com/imyanger/springboot-project/tree/master/p20-springboot-cache 使用EhCache作为缓存,我们先引入相关依赖. <dependency> &l

Spring Boot MyBatis 连接数据库配置示例

最近比较忙,没来得及抽时间把MyBatis的集成发出来,其实mybatis官网在2015年11月底就已经发布了对SpringBoot集成的Release版本,示例代码:spring-boot_jb51.rar 前面对JPA和JDBC连接数据库做了说明,本文也是参考官方的代码做个总结. 先说个题外话,SpringBoot默认使用 org.apache.tomcat.jdbc.pool.DataSource 现在有个叫 HikariCP 的JDBC连接池组件,据说其性能比常用的 c3p0.tomca

Spring Boot JPA访问Mysql示例

上篇演示了通过Maven构建Spring Boot 项目,引用web模块启动应用,完成简单的web 应用访问,本章内容在此基础上面加入数据访问与端口修改,下文代码与演例(本用例纯手工测试通过,放心入坑). 修改默认端口 在src\main\resources下加入application.properties内容如下 server.port=8888 项目目录结构 启动应用,日志显示: 端口已经由默认的8080 变更为8888 JPA访问mysql数据库 1.POM中加入 <!-- Spring