博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot2-第五章:整合EhCache
阅读量:6367 次
发布时间:2019-06-23

本文共 2650 字,大约阅读时间需要 8 分钟。

上一章我们简单的介绍了Springboot的使用Gson作为消息解析器,这一章我们来在springboot中使用一下缓存相关的注解。

本项目的GitHub:https://github.com/pc859107393/Go2SpringBoot.git

有兴趣交流springboot进行快速开发的同学可以加一下下面的企鹅群。

使用SpringBoot的缓存注解

在番外篇中,我已经介绍过springcache的注解,同样的我们在源码中去分析可以看到SpringBoot已经预先设定了一些常用的缓存,我们可以看看都有哪些东西:

  • org.springframework.cache
    • concurrent
      • ConcurrentMapCache 使用ConcurrentMap作为缓存技术(默认)
    • support
      • AbstractCacheManager CacheManager的抽象
      • NoOpCache 不会实际存储的简单缓存
      • SimpleCacheManager 简单缓存,常用于测试
    • ehcache
      • EhCacheCache
    • CaffeineCache
      • CaffeineCache
    • jcache
      • JCacheCache
    • transaction
      • AbstractTransactionSupportingCacheManager 抽象的支持事务的缓存管理器

当然上面的这些类,只是springboot默认集成的,要想使用缓存,首先我们需要在SpringBoot的入口类中加入对应的注解来开启缓存。

@SpringBootApplication@EnableWebMvc@EnableSwagger2@MapperScan(value = ["cn.acheng1314.base.dao"])@Configuration@EnableTransactionManagement@EnableCaching  //使用这个注解开启缓存class BaseApplication : WebMvcConfigurer {
//···省略代码}复制代码

当然默认的Spring会使用ConcurrentMapCacheManager,如何使用EhCache呢?我们需要在配置文件中做出修改。首先加入Ehcache的依赖:compile 'net.sf.ehcache:ehcache:2.10.5' ,再接着我们在配置文件中约定好Ehcache的配置,如下:

#Ehcache配置spring.cache.ehcache.config=classpath:/ehcache.xmlspring.cache.type=ehcache复制代码

这样写玩了就完事了吗? 然而并没有,我们需要先实现ehcache的配置,再service层实现注解才能使缓存生效,如下:

复制代码

接着我们来看看缓存注解在service层的应用。在我的番外篇中已经介绍过各个注解的使用了,这里不在阐述,实例如下:

import cn.acheng1314.base.dao.UserDaoimport cn.acheng1314.base.domain.Userimport com.baomidou.mybatisplus.plugins.pagination.Paginationimport com.baomidou.mybatisplus.service.impl.ServiceImplimport org.springframework.beans.factory.annotation.Autowiredimport org.springframework.cache.annotation.CacheConfigimport org.springframework.cache.annotation.Cacheableimport org.springframework.stereotype.Serviceimport kotlin.collections.ArrayList@Service(value = "userService") //这里需要和配置文件的cache的name对应,否则产生异常某个名为XX的缓存找不到@CacheConfig(cacheNames = ["cache_user"])  class UserServiceImpl : ServiceImpl
() { @Autowired lateinit var userDao: UserDao fun findUserByPage(pageNum: Int, pageSize: Int): ArrayList
{ return try { val pagination = Pagination(pageNum, pageSize) setTotalPage(pagination.pages) userDao.findAllByPage(pagination) } catch (e: Exception) { arrayListOf() } } var totalPage: Long? = null fun setTotalPage(pages: Long) { this.totalPage = pages } @Cacheable(sync = true) fun findAll() = baseMapper.selectList(null)}复制代码

到这里我们运行一下项目,可以看到第一次访问的时候速度会比后面的速度慢一点点,同样的我们手动在数据库中添加一个值,再来访问这个,会发现手动添加的不会被读出来,所以可以证明我们的缓存建立成功了。

具体的效果可以看下截图:

在上面的图中,我们明显的看到,作图中我手动插入一段数据后,在右图中并没有显示出来说明我们缓存建立成功了。

具体更多细节代码,请看我的项目源码,谢谢阅读。

转载地址:http://rcrma.baihongyu.com/

你可能感兴趣的文章
威胁情报平台
查看>>
UnsupportedOperationException:can't convert to dimension :typx=0x1
查看>>
iOS之Cookie
查看>>
计算机网络学习笔记--传输层知识总结
查看>>
Android Dagger依赖注入框架浅析
查看>>
数据分析系统DIY1/3:CentOS7+MariaDB安装纪实
查看>>
常用分析工具
查看>>
PhotoShop切图
查看>>
[LeetCode] Water and Jug Problem 水罐问题
查看>>
java数组遍历——iterator和for方法
查看>>
Linux程序存储结构与进程结构堆和栈的区别【转】
查看>>
重置 radio 和 checkbox 的样式
查看>>
Android实战简易教程-第二十三枪(基于Baas的用户注冊和登录模块实现!)
查看>>
oc59--匿名分类
查看>>
redis 持久化
查看>>
机器学习算法总结
查看>>
高效的找出两个List中的不同元素
查看>>
Revit二次钢筋
查看>>
Vertx简介
查看>>
项目经理在项目各阶段的工作重点-更新版
查看>>