-
spring整合ehcache缓存不了数据5
大部分按照这个帖子上面说的做的http://www.cnblogs.com/lcuzhanglei/archive/2012/05/31/2528124.html,
但是数据就是缓存不了,每次测试都访问数据库。网上也没搜到答案
这个是我的ehcache.xml配置文件<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true" monitoring="autodetect"> <diskStore path="d:\\temp\\cache"/> <defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" maxElementsOnDisk="10000000" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /> <cache name="demoCache" maxElementsInMemory="10000" maxElementsOnDisk="1000" eternal="false" overflowToDisk="true" diskSpoolBufferSizeMB="20" timeToIdleSeconds="300" timeToLiveSeconds="600" memoryStoreEvictionPolicy="LFU" /> </ehcache>
spring配置文件<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd" default-lazy-init="true"> <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"> <property name="configLocation"> <value>classpath:ehcache.xml</value> </property> </bean> <bean id="deptCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean"> <property name="cacheManager" ref="cacheManager"/> <property name="beanName" value="democache"/> </bean> <bean id="cacheInterceptor" class="com.xiaolu.interceptor.MethodCacheInterceptor"> <property name="cache" ref="deptCache"/> </bean> <bean id="methodCachePointcutAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"> <property name="advice" ref="cacheInterceptor"/> <property name="patterns"> <list> <value>.*getAllDept</value> </list> </property> </bean> <bean id="deptService" class="com.xiaolu.service.DeptService"/> <bean id="proxyFactoryBean" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target" ref="deptService"/> <property name="interceptorNames"> <list> <value>methodCachePointcutAdvisor</value> </list> </property> </bean> </beans>
监听器package com.xiaolu.interceptor; import java.io.Serializable; import net.sf.ehcache.Cache; import net.sf.ehcache.Element; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; public class MethodCacheInterceptor implements MethodInterceptor,InitializingBean { private Cache cache; @Override public Object invoke(MethodInvocation invocation) throws Throwable { String targetName = invocation.getThis().getClass().getName(); String methodName = invocation.getMethod().getName(); Object[] arguments = invocation.getArguments(); Object result = null; String cacheKey = getCacheKey(targetName, methodName, arguments); System.out.println("cacheKey:"+cacheKey); Element element = null; System.out.println("-----1-----"); synchronized(this){ element = cache.get(cacheKey); if(null == element){ result = invocation.proceed(); System.out.println("-----2----"); element = new Element(cacheKey, (Serializable)result); cache.put(element); } } return element.getValue(); } @Override public void afterPropertiesSet() throws Exception { Assert.notNull(cache, "A cache is required. Use setCache(Cache) to provide one."); } private String getCacheKey(String targetName,String methodName,Object[] arguments){ StringBuilder sb = new StringBuilder(); sb.append(targetName).append(".").append(methodName); if((arguments.length !=0)&&(arguments != null)){ for(int i=0;i<arguments.length;i++){ sb.append(".").append(arguments[i]); } } return sb.toString(); } public void setCache(Cache cache) { this.cache = cache; } }
访问数据库的类package com.xiaolu.service; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import com.xiaolu.pojo.Dept; public class DeptService { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; public List<Dept> getAllDept(){ String sql = "select * from dept"; List<Dept> list = new ArrayList<Dept>(); try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger"); pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); while(rs.next()){ Dept dept = new Dept(); dept.setDeptno(rs.getInt("deptno")); dept.setDname(rs.getString("dname")); dept.setLoc(rs.getString("loc")); list.add(dept); } } catch (Exception e) { e.printStackTrace(); } return list; } }
实体类package com.xiaolu.pojo; import java.io.Serializable; public class Dept implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private int deptno; private String dname; private String loc; public int getDeptno() { return deptno; } public void setDeptno(int deptno) { this.deptno = deptno; } public String getDname() { return dname; } public void setDname(String dname) { this.dname = dname; } public String getLoc() { return loc; } public void setLoc(String loc) { this.loc = loc; } }
测试代码package test; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.xiaolu.pojo.Dept; import com.xiaolu.service.DeptService; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; public class Test { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); DeptService service = (DeptService) context.getBean("proxyFactoryBean"); List<Dept> list = service.getAllDept(); for(Dept dept:list){ System.out.println(dept.getDname()); } } }
2013年3月13日 18:42
3个答案 按时间排序 按投票排序
-
采纳的答案
你测试方法有问题,在测试类里面new出ClassPathXmlApplicationContext,但是你下面用来从数据库取数据在同一个ClassPathXmlApplicationContext下只有一次,怎么可能会有缓存呢?,等于是每次都是new的不同的ClassPathXmlApplicationContext,每次都是new的不同的cache对象,你需要在测试中连续取几次数据。这样就可以看到结果
2013年3月14日 21:23
-
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); DeptService service = (DeptService) context.getBean("proxyFactoryBean"); for(int i=0;i<5;i++){ List<Dept> list = service.getAllDept(); for(Dept dept:list){ System.out.println(dept.getDname()); } }
在数据库查询方法中 添加日志信息 看查询了几次数据库2013年3月15日 13:54
-
缓存时间设置太短了
timeToIdleSeconds="300"
timeToLiveSeconds="600"
============================================
timeToIdleSeconds="30000"
timeToLiveSeconds="60000"2013年3月14日 10:39
相关推荐
本篇文章将详细介绍如何在Spring项目中集成Ehcache,以及如何通过Spring的AOP(面向切面编程)实现方法级别的缓存注解。 首先,我们需要在项目中引入Ehcache的依赖。通常,这可以通过在`pom.xml`文件中添加Maven...
当我们谈论“Spring + Ehcache + Redis”两级缓存时,我们实际上是在讨论如何在Java环境中利用Spring框架来集成Ehcache作为本地缓存,并利用Redis作为分布式二级缓存,构建一个高效且可扩展的缓存解决方案。...
现在我们来详细探讨如何在Spring应用中集成EhCache以及相关知识点。 1. **EhCache简介** - EhCache 是一个广泛使用的Java缓存解决方案,支持本地内存缓存和分布式缓存。 - 它提供了线程安全、可配置的缓存策略,...
**Spring+EhCache缓存实例详解** 在现代的Java企业级应用中,缓存技术扮演着至关重要的角色,它能够显著提升系统性能,减少数据库负载。Spring框架与EhCache的结合,为开发者提供了一种高效、易用的缓存解决方案。...
配置ehcache缓存,存储内存的设置,与spring 的整合等
Spring整合Ehcache是将Ehcache作为Spring应用的缓存解决方案,以提高应用程序的性能和效率。Ehcache是一个广泛使用的开源Java分布式缓存,它支持内存和磁盘存储,具有缓存热备、缓存复制等功能。下面将详细介绍...
在这个"spring+ehcache示例整合Demo"中,我们将会探讨如何将Ehcache集成到Spring框架中,以实现高效的缓存管理。 首先,我们需要在项目的`pom.xml`文件中引入Ehcache和Spring的依赖。Ehcache通常使用的是`org....
本篇文章将详细探讨如何在Spring框架中集成并实现基于方法的缓存机制,利用Ehcache来优化数据访问。 首先,我们需要理解Spring的AOP概念,AOP允许我们定义横切关注点,如日志、事务管理或,正如在这个案例中,缓存...
Spring整合EhCache是将EhCache作为一个缓存解决方案与Spring框架进行集成,以提高应用程序的性能和效率。EhCache是一款开源、轻量级的Java缓存库,广泛用于缓存中间件,以减少数据库访问,提升系统响应速度。 在...
通过Spring4的Java配置方式,我们可以轻松地集成EhCache到我们的项目中,实现对页面整体或局部内容的缓存。 首先,我们需要在项目中添加EhCache和Spring的相关依赖。确保`pom.xml`文件中包含以下依赖: ```xml ...
Spring整合EhCache是一个常见的缓存管理方案,尤其在企业级Java应用中广泛使用。Spring框架提供了对多种缓存技术的支持,包括EhCache,这使得我们能够在Spring应用中轻松地实现数据缓存,提高系统性能。下面我们将...
Spring对ehCache的支持使得集成更加简便,我们可以利用Spring的缓存抽象来管理ehCache实例,包括设置缓存策略、大小限制等。 为了实现数据更新时的缓存刷新,我们可以利用Spring的事件驱动模型。当创建、更新或删除...
Ehcache是一款广泛使用的开源Java缓存解决方案,而Spring框架则为它提供了一个方便的集成层,使得我们可以在不修改核心业务代码的情况下轻松地添加缓存功能。 首先,我们需要在项目中引入Ehcache和Spring的相关依赖...
#### Spring整合EhCache缓存 EhCache是一种广泛使用的纯Java实现的缓存系统,具有高性能和易于使用的特性。Spring框架通过`EhCacheCacheManager`提供了一种无缝整合EhCache的方式。 1. **依赖引入**:确保项目中...
1.通过google ehcache-spring-annotatios.jar自动注解方式实现整合Spring+Ehcache。 2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。...
### Spring Boot集成Ehcache实现缓存 #### 一、Ehcache简介 Ehcache是一个高效的纯Java进程内缓存框架,以其快速且轻便的特点而被广泛应用于各种应用场景中,尤其在Java EE和轻量级容器环境中更是受到青睐。...
本示例"spring+ehcache demo"将带你深入理解如何在Spring环境中集成并使用Ehcache进行数据缓存。 Ehcache是一款广泛使用的开源Java缓存库,它提供了内存和磁盘存储,支持分布式缓存,并且可以与Spring框架无缝结合...
通过上述步骤,我们可以在Spring项目中成功集成ehcache,并利用Spring提供的缓存注解来方便地管理缓存。这种集成不仅可以显著提高应用的性能,还能简化代码的复杂度,使得开发者能够更加专注于业务逻辑的编写。希望...
本文将首先介绍 Ehcache 的基本使用,然后讲解如何在 Spring 中集成 Ehcache 进行缓存管理。 ## Ehcache 基本概念 Ehcache 是一个纯 Java 实现的进程内缓存框架,具有快速响应、内存高效利用等特点。在 Hibernate ...
**正文** Ehcache 是一个开源的 Java 缓存库,它提供了本地内存缓存以及分布式缓存解决方案。在 Spring 框架中,...通过上述步骤,开发者可以轻松地将 Ehcache 引入到 Spring 应用中,并实现高效的数据缓存策略。