有了前面springBoot整合redis时分析的,用redis来做spring缓存注解的实现原理后,再整合ehcache来做spring缓存注解的实现就非常简单了。时光隧道:springBoot2.x整合redis

步骤(基于注解先)

1、导入ehcache的依赖(这里为什么不用写依赖的版本号,大家知道吗?欢迎评论区留言)

<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId>
</dependency>

2、在类路径下(resources文件夹下)放一个文件ehcache.xml

文件内容就使用helloworld中用的就行。时光隧道:1、ehcache简介与HelloWorld

当然也可以在springBoot的配置文件中指定ehcache配置文件的位置:

spring.cache.ehcache.config=classpath:ehcache_config.xml

3、接下来就是基于注解来使用ehcache了

例如:关于注解的详细使用请看springBoot2.x整合redis时的介绍

注意,cacheNames属性是用来指定要使用哪个cache的,所以在ehcache的xml配置文件中,必须要有某个cache的name属性值与它一一对应,否则会报Cannot find cache name 'xxx'异常。在redis中不必这么做,具体可以看spring cache关于注解实现的源码。

@RestController
public class EmployeeController {@Autowiredprivate EmployeeService employeeService;@Cacheable(cacheNames = "empCache",key = "#id")@GetMapping("/emp/{id}")public Employee getEmpById(@PathVariable("id") Integer id){Employee employee = employeeService.getEmployeeById(id);return employee;}//@CachePut(cacheNames = "employee",key = "#employee.id")@GetMapping("/addEmp")public Employee addEmp(Employee employee){employeeService.addEmployee(employee);return employee;}@CachePut(cacheNames = "employee",key = "#employee.id")public Employee updateEmployee(Employee employee){employeeService.updateEmployee(employee);return employee;}//@CacheEvict(cacheNames = "employee",key = "#id")//@CacheEvict(cacheNames = "employee",allEntries = true)@GetMapping("/deleteEmp")public String deleteEmployee(Integer id){System.out.println("删除id为"+id+"的员工。");return "删除成功!";}}

基于代码的方式使用ehcache

在整合springBoot后,可以直接在需要使用的地方注入CacheManager,像这样

注意,这里的CacheManager 是org.springframework.cache包下的,不是net.sf.ehcache包下的。

@Resource
private CacheManager cacheManager;

然后像之前helloWorld时那样,使用ehcache提供的API进行操作即可。

但是这样操作不太方便,不如自己封装一个工具类比较好:更多功能后续再封装吧。

//对element进行增删改查的工具类
public class EhcacheUtils {private static Logger logger = LoggerFactory.getLogger(EhcacheUtils.class);//使用一个静态变量保存cacheManager(create()读取类路径下的ehcache.xml文件创建单例的cacheManager)private static CacheManager cacheManager = CacheManager.create();/*** 从某cache中获取一个element的value* @param cacheName cache的名字* @param key element的key* @return element的value*/public static Object get(String cacheName,String key){Cache cache = cacheManager.getCache(cacheName);if (cache != null){return cache.get(key);}return null;}/*** 向某cache中添加一个element(相同key的元素会添加不进去)* @param cacheName cache的名字* @param key element的key* @param value element的value*/public static void add(String cacheName,String key,Object value){Cache cache = cacheManager.getCache(cacheName);if (cache == null){//使用defaultCache的配置来创建一个cachecacheManager.addCache(cacheName);Cache defaultCache = cacheManager.getCache(cacheName);defaultCache.put(new Element(key,value));logger.error("cache[{}]不存在,系统使用默认配置创建cache并添加element完成!",cacheName);}else {cache.putIfAbsent(new Element(key,value));}}/*** 更新element的value,根据cacheName和key唯一确定一个element* @param cacheName cache的名字* @param key element的key* @param value element的value*/public static void update(String cacheName,String key,Object value){Cache cache = cacheManager.getCache(cacheName);if (cache != null){cache.put(new Element(key,value));}else {logger.error("cache[{}]不存在,更新失败!",cacheName);}}/*** 从某cache中删除某个element* @param cacheName cache的名字* @param key element的key*/public static void remove(String cacheName,String key){Cache cache = cacheManager.getCache(cacheName);if (cache != null){cache.remove(key);}}/*** 根据cacheName判断cache是否存在* @param cacheName cache的名字* @return true存在,false不存在*/private static boolean checkCache(String cacheName){Cache cache = cacheManager.getCache(cacheName);return null == cache;}

ok,ehcache的基本内容到这里也就这就介绍完了,以上两篇文章的内容应对日常的ehcache缓存需要已经够用了。

更深层次的使用了研究请查看ehcache官网:http://www.ehcache.org/generated/2.10.4/html/ehc-all/

上一篇:1、ehcache简介与HelloWorld

下一篇:ehcache结合redis实现二级缓存系统

2、ehcache与springBoot整合相关推荐

  1. 【SpringBoot整合缓存】-----Redis缓存篇

    本专栏将从基础开始,循序渐进,以实战为线索,逐步深入SpringBoot相关知识相关知识,打造完整的SpringBoot学习步骤,提升工程化编码能力和思维能力,写出高质量代码.希望大家都能够从中有所收 ...

  2. 搭建第一个SpringBoot工程;SpringBoot整合mybatis;SpringBoot整合Redis-cluster集群;SpringBoot整合EhCache;

    写在前头,以下内容主要是为了自己复习之用,如果你有幸看到这篇文章,请不要嫌弃某些地方有所跳跃或省略. 1. 搭建第一个SpringBoot工程 1.1 创建工程 1.2 初始pom.xml文件内容 1 ...

  3. springboot整合jpa_SpringBoot与SpringDataJPA整合 Ehcache

    1. SpringBoot整合Spring Data JPA步骤-(上) (1) 创建一个Maven的jar工程. (2)修改POM文件添加Web启动器,Thymeleaf启动器,Spring Dat ...

  4. springboot整合ehcache+redis实现双缓存

    在一些对并发业务要求较高的场景下,对页面数据的响应是个急需解决的问题,对后端来说,ehcache+redis实现双缓存是解决这一问题的不错思路,而且在不少的电商项目中得到了很好的验证,但我在网上搜寻资 ...

  5. SpringBoot整合(四)整合Ehcache、Redis、Memcached、jetcache、j2cache缓存

    ​ 企业级应用主要作用是信息处理,当需要读取数据时,由于受限于数据库的访问效率,导致整体系统性能偏低. ​ 为了改善上述现象,开发者通常会在应用程序与数据库之间建立一种临时的数据存储机制,该区域中的数 ...

  6. springboot整合ehcache使用

    springboot整合ehcache使用 其实本地缓存的解决方案也有很多种,像Ehcache,GuavaCache,JCache等目前Ehcache 是现在最流行的纯Java开源缓存框架,配置简单. ...

  7. springboot整合shiro和session的详细过程和自定义登录拦截器

    文章目录 1.shiro依赖 2.shiro配置 shiro过滤器配置: 关联自定义的其他管理器 自定义会话工厂: 3.登陆时记录用户信息 4.shiro一些工具类的学习 5.自定义登录拦截器 shi ...

  8. SpringBoot整合Shiro实现登录认证和授权CHCache

    文章目录 一. springboot实现普通登录 1 添加依赖 2 编写配置文件 3 新建实体类和mapper 4 编写业务层代码 5 编写控制器 6 编写启动类 7 编写登录页面和主页面 二. sp ...

  9. redis命令,SpringBoot整合Redis6,主从复制,哨兵模式,集群,springCache初高级应用。

    目录 1. Docker安装Redis 2. Redis的基础 2.1 redis的key命令 2.2 reids的数据结构(6.0新增的数据结构) 1. String(字符串)类型 2. List( ...

最新文章

  1. 算法训练 素因子去重
  2. C++ 十字链表图转java版
  3. NVIDIA | 一种重建照片的 AI 图像技术
  4. 如何上传本地文件到github又如何删除自己的github仓库
  5. 【网络编程】之十三、ping程序实现
  6. linux常用操作符,Shell常用操作符总结
  7. 阿里巴巴指东打西,PC之后卖盒饭?
  8. 设计模式(一)--单一职责模式(衡量接口或类设计)
  9. IIS Express加入MIME映射
  10. 内网代理——常用工具
  11. 03-KVM虚拟磁盘格式及快照
  12. PTA L1-003 个位数统计(详解)
  13. 【元宇宙】元宇宙的概念距离我们有多远
  14. 不是每个音乐节都值得狂欢,抖音就不一样
  15. android 重力感应view,Android重力感应示例
  16. JSON 对象(object)
  17. 【机器学习】详解 RNN
  18. Matlab在线执行
  19. 亚马逊上卖毛绒玩具CPC认证注意事项
  20. mysql 8.0版本 error 3516 ;error 3618

热门文章

  1. Pubwin服务端重装(安装)教程
  2. 一个最简单的Delphi2010的PNG异形窗口方法
  3. XMind之快速上手
  4. 广东医科大学计算机网络,广东海洋大学计算机网络历年考题(直接阅读版6套可编辑)课件.doc...
  5. 三菱FX系列PLC的modbusTCP以太网通讯
  6. 网络与信息安全-第三章-对称秘钥加密算法
  7. 31.Python中verbatim标签使用详解
  8. (4.6.14)android 插桩基本概念plugging or Swap
  9. 视频播放器 layui-ckplayer
  10. 第1周学习笔记:深度学习和pytorch基础