文档章节

spring基于注解Ehcache缓存整合

zhaoxj
 zhaoxj
发布于 2013/08/05 00:19
字数 642
阅读 19693
收藏 188

    今天下午做了一下缓存整合在项目中,以前没有用过也没有学过。都知道spring已经对Ehcache进行了很好的支持,我的spring版本是3.2.2在spring-context-support.jar包中可以看到.以前的版本可能会不太一样。

我下的ehcache是ehcache-web-2.0.4-distribution.gzehcache-2.7.3-distribution.tar.gz一个做页面的缓存一个做查询的缓存。

    echcache的配置也不说了网上一大堆,而且解释的也很清楚。但是spring基于注解的整合好像还不太一样,好吧看官方文档进行配置好一点。

    官网上有这么一句话:EHCache support moved to spring-context-support 看来以前的版本还不是在上面提到的那个包中。接着看配置吧:

    

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:cache="http://www.springframework.org/schema/cache"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">
    <cache:annotation-driven />
</beans>
这是官方文档中的基于注解的XML配置如果加上缓存的配置的话上面的配置还要加上下面这一句:
xmlns:p="http://www.springframework.org/schema/p"
缓存的配置如下:


<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cache-manager-ref="ehcache"/>
<!-- EhCache library setup -->
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:config-location="classpath:ehcache.xml" p:shared="true"/>

OK!!缓存已经完成了

说明一下官网上没有p:shared="true"在配echcahe的时候,这时启动会报一个错误:


net.sf.ehcache.CacheException:Another unnamed CacheManager already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following
我找了半天也不知道起动的时候哪还创建了一个CancheManager但加上 p:shared="true"就没事了。命名空间的p打不开我也不知道是什么意思。请高手指点。我觉得大概意思就是使用一个cache吧。


做一个简单的测试!

@Cacheable(value="sampleCache1",key="#id")
public T getById(String id) {
  return (T) getSession().get(clazz, id);
}
在baseDao的get方法上进行配置在测试类中用userService服务进行测试看输出几条sql语句:

test类

public class CancheSpring extends BaseSpringTest {
	@Resource
	private UserService userService;
	
	@Test
	public void testGetCanche(){
		String id = "40288183401e060a01401e06116b0000";
		User user = userService.getById(id);
		System.out.println(user);
		User user2 = userService.getById(id);
		System.out.println(user2);
	}
}
当然id我从数据库中直接copy出来的UUID.输出结果如下:

OK。很明显可以看到两个对象是一模一样的。好吧配置成功能了可以在其他需要的地方方便使用。还有一个注解是@CacheEvict是删除操作。页面缓存明天再写,也有好多不明白的地方。@晓骏 看完记的指点一下哈!



 

© 著作权归作者所有

zhaoxj
粉丝 9
博文 9
码字总数 2841
作品 0
西安
程序员
私信 提问
加载中

评论(28)

MasterHu
MasterHu
话说我使用junit测试缓存成功为什么走页面请求就失败呢
黄钦
3.2.2 为什么按这个配置。。spring始终缓存不了,每次查数据库
小小Dao
博主发的配置是有效的,感谢! (个人经验:新手配置ehcache,jar包的版本一定要正确,不然很容易导致配置出错或者配置无效)
wadekun
wadekun

引用来自“东向利”的评论

引用来自“leh”的评论

靠,我也碰到启动说已经有个缓存存在了,结果启动不了Tomcat

net.sf.ehcache.CacheException:Another unnamed CacheManager already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following

此问题是因为在数据源设置中,启用了Hibernate的缓存支持功能,
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">classpath:ehcache.xml</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
以上设置;如果还要在Spring中使用,只要设置如下就可以:
<cache:annotation-driven cache-manager="cacheManager" />
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
<property name="name" value="default" />
</bean>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
<property name="name" value="com.codeworker.mycms.config" />
</bean>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
<property name="name" value="com.codeworker.mycms.channel" />
</bean>
</set>
</property>
</bean>
oschina首席死宅
oschina首席死宅
@晓骏 我也是用的类似配置,在junit测试类中确实缓存了数据,但是放到springmvc中这个缓存就没用了,求解,我用mysql administrator可以看到刷新页面的时候每次都有query产生
东向利
东向利

引用来自“leh”的评论

靠,我也碰到启动说已经有个缓存存在了,结果启动不了Tomcat

net.sf.ehcache.CacheException:Another unnamed CacheManager already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following

此问题是因为在数据源设置中,启用了Hibernate的缓存支持功能,
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">classpath:ehcache.xml</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
以上设置;如果还要在Spring中使用,只要设置如下就可以:
<cache:annotation-driven cache-manager="cacheManager" />
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
<property name="name" value="default" />
</bean>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
<property name="name" value="com.codeworker.mycms.config" />
</bean>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
<property name="name" value="com.codeworker.mycms.channel" />
</bean>
</set>
</property>
</bean>
东向利
东向利
net.sf.ehcache.CacheException:Another unnamed CacheManager already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following

此问题是因为在数据源设置中,启用了Hibernate的缓存支持功能,
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">classpath:ehcache.xml</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
以上设置;如果还要在Spring中使用,只要设置如下就可以:
<cache:annotation-driven cache-manager="cacheManager" />
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
<property name="name" value="default" />
</bean>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
<property name="name" value="com.codeworker.mycms.config" />
</bean>
<bean class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean">
<property name="name" value="com.codeworker.mycms.channel" />
</bean>
</set>
</property>
</bean>
cwalet
cwalet

引用来自“zhaoxj”的评论

引用来自“cwalet”的评论

这样的文章也能首页推荐。。?

额。。。我也不清楚哈!!如果你觉得我写不好或有什么不对的地方欢迎指出来!!我入行时间不长好多东西需要学习!!谢谢!

没有,你写的没错,但是过于基础,我觉得首页应该推荐深层次一点,文章结构更紧密、内容更详尽的
zhaoxj
zhaoxj 博主

引用来自“cwalet”的评论

这样的文章也能首页推荐。。?

额。。。我也不清楚哈!!如果你觉得我写不好或有什么不对的地方欢迎指出来!!我入行时间不长好多东西需要学习!!谢谢!
cwalet
cwalet
这样的文章也能首页推荐。。?
spring+ehcache+注解的使用

spring+ehcache+注解的使用 为了提高系统的运行效率,引入缓存机制,减少数据库访问和磁盘IO。下面说明一下ehcache和spring整合配置。 总共需要四步,引入包,添加ehcache.xml文件,在sprin...

风中帆
2015/11/04
208
0
3步轻松搞定Spring Boot缓存

作者:谭朝红 前言 本次内容主要介绍基于Ehcache 3.0来快速实现Spring Boot应用程序的数据缓存功能。在Spring Boot应用程序中,我们可以通过Spring Caching来快速搞定数据缓存。 接下来我们将...

Java架构师追风
09/06
0
0
在Spring、Hibernate中使用Ehcache缓存

在Spring、Hibernate中使用Ehcache缓存 前一篇http://www.cnblogs.com/hoojo/archive/2012/07/12/2587556.html介绍了Ehcache整合Spring缓存,使用页面、对象缓存;这里将介绍在Hibernate中使...

DavidBao
2015/05/15
58
0
Spring3.1 Cache注解

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

小样
2012/02/28
706
0
memcached与spring提供的cache接口整合

spring 从3.x就提供了cache接口,spring默认实现的缓存是ehcache,spring的cache接口: public interface Cache { String getName(); Object getNativeCache(); ValueWrapper get(Object ke......

张升强
2015/01/16
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

领域驱动中的“贫血症和失忆症” --实践领域驱动--原文

贫血症严重危害着人类健康,并且伴随有危险的副作用。当贫血领域对象被首次提出来时,它并不是一个博得赞美的词汇,它描述的是一个缺少内在行为领域对象。奇怪的是,人们对于贫血领域对象的态...

还仙
20分钟前
5
0
条码打印软件中标签预览正常打印无反应怎么解决

在使用条码打印软件制作标签时,有客户反馈,标签打印预览正常的,但是打印无反应,咨询是怎么回事?今天针对这个情况,可以参考以下方法进行解决。 一、预览正常情况下,打印没反应 (1)在条码...

中琅软件
29分钟前
5
0
判断字符串的时候

判断字符串的时候一定把常量房前边, //报警程度 String leve = vo.getDeviceAlertDeal().getWarnLevel(); if(("0").equals(leve)) { row.add("无报警"); }else if(("1").equals(leve)) { ro......

简小姐
30分钟前
7
0
Linux maven3.6.2 install

PS:安装 maven 之前请先安装 jdk 1.安装 wget 命令(安装过就不用了) yum -y install wget 2.寻找需要的 maven 版本 https://maven.apache.org/download.cgi 3.进入 /var/local 文件夹 cd...

东方神祇
32分钟前
5
0
Tomcat源码分析二:先看看Tomcat的整体架构

Tomcat源码分析二:先看看Tomcat的整体架构 Tomcat架构图 我们先来看一张比较经典的Tomcat架构图: 从这张图中,我们可以看出Tomcat中含有Server、Service、Connector、Container等组件,接下...

flygrk
35分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部