时间:2021-05-20
本文讲解Spring Boot与EhCache的整合。
1 EhCache简介
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。
2 Spring Boot整合EhCache步骤 2.1 创建项目,导入依赖
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// */@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = MyBootApplication.class)public class EhCacheDemo { @Autowired private CustomerService customerService; @Test public void test1(){ //查询第一次 System.out.println(customerService.findById(1)); //查询第二次 System.out.println(customerService.findById(1)); }}2.7 运行测试
从结果可以看出,第一次调用Service的时候,到Service内部获取数据。但是第二次调用Service时已经不需要从Service获取数据,证明第一次查询的时候已经把Customer对象缓存到EhCache中。
3 EhCache常用注解 @Cacheable: 主要针对方法配置,能够根据方法的请求参数对其进行缓存 @CacheConfig: 统一配置本类的缓存注解的属性 @CachePut:保证方法被调用,又希望结果被缓存。与@Cacheable区别在于是否每次都调用方法,常用于更新 @CacheEvict :清空缓存 @Cacheable/@CachePut/@CacheEvict 主要的参数: value:缓存的名称,在 spring 配置文件中定义,必须指定至少一个
例如:
@Cacheable(value=”mycache”) 或者
@Cacheable(value={”cache1”,”cache2”}
key:缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,
如果不指定,则缺省按照方法的所有参数进行组合
例如:
@Cacheable(value=”testcache”,key=”#id”)
condition:缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,
只有为 true 才进行缓存/清除缓存
例如:@Cacheable(value=”testcache”,condition=”#userName.length()>2”)
unless 否定缓存。当条件结果为TRUE时,就不会缓存。
@Cacheable(value=”testcache”,unless=”#userName.length()>2”)
allEntries
(@CacheEvict ): 是否清空所有缓存内容,缺省为 false,如果指定为 true,
则方法调用后将立即清空所有缓存
例如:
@CachEvict(value=”testcache”,allEntries=true)
beforeInvocation
(@CacheEvict): 是否在方法执行前就清空,缺省为 false,如果指定为 true,
则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法
执行抛出异常,则不会清空缓存
例如:
@CachEvict(value=”testcache”,beforeInvocation=true)
3.1 @Cacheable
@Cacheable注解会先查询是否已经有缓存,有会使用缓存,没有则会执行方法并缓存。
@Cacheable(value = "customer" ,key = "targetClass + methodName +#p0")public List<Customer> queryAll(Customer cust) { return customerDao.findAllByUid(cust);}3.2 @CacheConfig
当我们需要缓存的地方越来越多,你可以使用@CacheConfig(cacheNames = {"myCache"})注解来统一指定value的值,这时可省略value,如果你在你的方法依旧写上了value,那么依然以方法的value值为准。
使用方法如下:
@CacheConfig(cacheNames = {"myCache"})public class UserServiceImpl implements UserService { @Override @Cacheable(key = "targetClass + methodName +#p0")//此处没写value public List<BotRelation> findUsers(int num) { return userDao.findUsers(num); } .....}3.3 @CachePut
@CachePut注解的作用 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存,和 @Cacheable 不同的是,它每次都会触发真实方法的调用 。简单来说就是用户更新缓存数据。但需要注意的是该注解的value 和 key 必须与要更新的缓存相同,也就是与@Cacheable 相同。示例:
@CachePut(value = "customer", key = "targetClass + #p0")public Customer updata(Customer cust) { Customer customer = customerDao.findAllById(cust.getId()); customer.updata(cust); return customer ;}@Cacheable(value = "customer", key = "targetClass +#p0")//清空缓存public Customer save(Customer cust) { customerDao.save(cust); return cust;}3.4 @CacheEvict
@CachEvict 的作用 主要针对方法配置,能够根据一定的条件对缓存进行清空 。
@Cacheable(value = "customer",key = "#p0.id")public Customer save(Customer cust) { customerDao.save(cust); return job;}//清除一条缓存,key为要清空的数据@CacheEvict(value="customer",key="#id")public void delect(int id) { customerDao.deleteAllById(id);}//方法调用后清空所有缓存@CacheEvict(value="customerCache",allEntries=true)public void delectAll() { customerDao.deleteAll();}//方法调用前清空所有缓存@CacheEvict(value="customerCache",beforeInvocation=true)public void delectAll() { customerDao.deleteAll();}总结
以上所述是小编给大家介绍的Spring Boot整合EhCache的步骤详解,希望对大家有所帮助!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
方案实施1、spring和ehcache集成主要获取ehcache作为操作ehcache的对象。spring.xml中注入ehcacheManager和ehCa
前期工作1.导入mybatis整合依赖org.mybatis.spring.bootmybatis-spring-boot-starter2.1.42.连接数据
本文介绍了springboot的maven配置依赖详解,分享给大家,具体如下:我们通过引用spring-boot-starter-parent,添加spring
sprig-boot是一个微服务架构,加快了spring工程快速开发,以及简便了配置。接下来开始spring-boot与mybatis的整合。1、创建一个mav
1.什么是spring-boot-devtoolsspring-boot-devtools是spring-boot项目开发时的一个热部署工具,安装了spring