文档章节

spring + ehcache 注解使用实例

李星
 李星
发布于 2015/04/22 19:00
字数 993
阅读 6K
收藏 37

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

1.pom.xml中添加ehcache依赖包

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

2.在classpath下增加ehcache配置文件 ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache updateCheck="false">
    <diskStore path="java.io.tmpdir"/>
<!--
       name:缓存名称。
       maxElementsInMemory:缓存最大个数。
       eternal:对象是否永久有效,一但设置了,timeout将不起作用。
       timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。
                仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
       timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。
                    仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
       overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
       diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
       maxElementsOnDisk:硬盘最大缓存个数。
       diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts 
                of the Virtual Machine. The default value is false.
       diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
       memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。
                        默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
       clearOnFlush:内存数量最大时是否清除。
    -->
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="60"
            timeToLiveSeconds="60"
            overflowToDisk="true"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />

   <cache name="QY_api_productTop" maxElementsInMemory="10000" eternal="false"
           timeToIdleSeconds="20" timeToLiveSeconds="20" overflowToDisk="false"
           diskPersistent="false" diskExpiryThreadIntervalSeconds="1"/>
</ehcache>




3.spring配置文件 applicationContext.xml 需要注意添加红色斜体部分配置

<beans
 xmlns:cache="http://www.springframework.org/schema/cache"
 xsi:schemaLocation=" http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.2.xsd"
 >

<!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效 -->
<cache:annotation-driven cache-manager="ehcacheManager"/>
<!-- cacheManager工厂类,指定ehcache.xml的位置 -->
<bean id="ehcacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml" />
</bean>
<!-- 声明cacheManager -->
<bean id="ehcacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehcacheManagerFactory" />
</bean>


4.在service层增加注解配置

4.1 Using Spring 3.1      spring 3.1 及以上版本配置

@Cacheable

Cache a method call. In the following example, the value is the return type, a Manual. The key is extracted from the ISBN argument using the id.

@org.springframework.cache.annotation.Cacheable(value="QY_api_productTop",
 key="#isbn.id") 
public Manual findManual(ISBN isbn, boolean checkWarehouse)

  key="#isbn.id"  对象缓存的key值,需要保证唯一, 用的是Spring的 SpEL表达式, 取值为 isbn对象的id属性值

  value="QY_api_productTop":指的是ehcache.xml里的缓存名字

还支持条件condition,包括 属性 id<10,如下:

@Cacheable(value = "QY_api_productTop",key="#isbn.id",condition = "#isbn.id<10")
public Manual findManual(ISBN isbn, boolean checkWarehouse)

  

@CacheEvict 

Clears the cache when called.   清除QY_api_productTop缓存中所有对象

@org.springframework.cache.annotation.CacheEvict(value = "QY_api_productTop",
 allEntries=true) 
public void loadManuals(Long id)


可以清除指定对象的缓存例如:

@CacheEvict(value = "QY_api_productTop", key = "#id")
public void loadManuals(Long id)


4.2 Spring 2.5 to 3.1  版本配置   还依赖以下jar

<dependency>  

    <groupId>com.googlecode.ehcache-spring-annotations</groupId>  

    <artifactId>ehcache-spring-annotations</artifactId>  

    <version>1.1.2</version>  

</dependency> 

This open source, led by Eric Dalquist, predates the Spring 3.1 project. You can use it with earlier versions of Spring, or you can use it with 3.1.

@Cacheable

As with Spring 3.1 it uses an @Cacheable annotation to cache a method. In this example calls to findMessage are stored in a cache named “messageCache”. The values are of type Message. The id for each entry is the id argument given.

@Cacheable(cacheName = "messageCache")
public Message findMessage(long id)

@TriggersRemove

And for cache invalidation, there is the @TriggersRemove annotation. In this example, cache.removeAll() is called after the method is invoked.

@TriggersRemove(cacheName = "messagesCache",
when = When.AFTER_METHOD_INVOCATION, removeAll = true)
public void addMessage(Message message)

5.测试验证, 查看打印出来的sql

例如hibernate配置中设置show_sql=true

<prop key="hibernate.show_sql">true</prop>

 5.1 第一次访问缓存方法后在缓存时间内多次访问查看是否有sql输出  ,  没有为缓存正常

 5.2 第二次输出时间和第一次时间间隔是不是大于 ehcache.xml中设置的时间     大于为缓存正常

李星

李星

粉丝 16
博文 20
码字总数 9685
作品 0
长宁
程序员
私信 提问
加载中
此博客有 1 条评论,请先登录后再查看。
Spring整合Ehcache管理缓存

目录   前言   概述   安装   Ehcache的使用   Spring整合Ehcache   参考 前言 Ehcache 是一个成熟的缓存框架,你可以直接使用它来管理你的缓存。 Spring 提供了对缓存功能的抽象...

osc_57h7mkgj
01/16
0
0
Spring Boot 缓存应用 Ehcache 入门教程

Ehcache 小巧轻便、具备持久化机制,不用担心JVM和服务器重启的数据丢失。经典案例就是著名的Hibernate的默认缓存策略就是用Ehcache,Liferay的缓存也是依赖Ehcache。 本章讲解 Ehcache 在 ...

osc_acwq3gr9
2019/08/05
2
0
spring+hibernate整合ehcache

1.使用ehcache来提高系统的性能,现在用的非常多, 也支持分布式的缓存,在hibernate当中作为二级缓存的实现产品,可以提高查询性能。 2.在之前的struts2.12+Spring3.2+hibernate4.2集成系...

玄空
2013/12/17
200
0
Spring3.1 Cache注解

需要感慨一下,spring3.0时丢弃了2.5时的spring-modules-cache.jar,致使无法使用spring来方便的管理cache注解,好在3.1.M1中增加了对cache注解的支持,可喜可贺啊! 希望了解spring2.5的cac...

小样
2012/02/28
711
0
springboot配置ehcache2.X缓存(@Cacheable等注解和手动操作缓存的工具类 支持element粒度的时间设置)

本文只写出一些注意事项和源码,请善用官方文档~ 注解实现 @Cacheable @CachePut @CacheEvit启动类上加@EnableCaching就可以开启缓存由文档可知,自动检测缓存实现的默认顺序为1.Generic2.JC...

osc_yiec7bem
04/16
5
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringCloud 应用在 Kubernetes 上的最佳实践 — 开发篇

作者 | 孤弋 阿里云高级技术专家,负责 EDAS 的开发和用户体验优化工作。 前言 近年来,云原生、Kubernetes、微服务、SpringCloud 这些名词在技术圈内不绝于耳,数据显示,使用 SpringCloud ...

阿里云技术博客
15分钟前
0
0
如何能够高效率学习Web前端技术

  Web前端开发作为前端技术的重要组成,一直占据着重要的地位,整个IT行业内有大量的前端开发从业者,随着移动互联网、大数据和人工智能的发展,目前前端的知识体系也在逐渐丰富。   要想...

SXXpenguin
15分钟前
0
0
Spring Boot 2.3.0正式发布:优雅停机、配置文件位置通配符新特性一览

当大潮退去,才知道谁在裸泳。。关注公众号【BAT的乌托邦】开启专栏式学习,拒绝浅尝辄止。本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈、MyBatis、中间件等小而美的专栏...

osc_odp8kgup
16分钟前
0
0
HttpMessageConverter是这样转换数据的

Java Web 人员经常要设计 RESTful API(如何设计好的RESTful API),通过 json 数据进行交互。那么前端传入的 json 数据如何被解析成 Java 对象作为 API入参,API 返回结果又如何将 Java 对象...

tan日拱一兵
2019/05/27
7
0
angular浏览器兼容性问题解决方案

问题:edge浏览器下,固定列的边框消失 原因:ng-zorro-antd表格组件使用nzLeft和nzRight指令固定的表格列,这两个指令的实现css3中的标签: position: -webkit-sticky !important;positio...

osc_elbmybcg
17分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部