Srping+Ehcache 在Service层配置缓存(太懒了,不写如何配置了,就代码吧)
1. ehcache 文件
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="520"
timeToLiveSeconds="520"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>
<cache name="testServiceCache"
maxElementsInMemory="10"
eternal="false"
timeToIdleSeconds="200"
timeToLiveSeconds="300"
overflowToDisk="true"
/>
</ehcache>
2. applicationContext.xml 文件 相关代码
<!-- Service Cache Ehcache -->
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation">
<value>ehcache.xml</value>
</property>
</bean>
<bean id="methodCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager">
<ref local="cacheManager"/>
</property>
<property name="cacheName">
<value>testServiceCache</value>
</property>
</bean>
<!-- methodCacheInterceptor 要自己实现的代码 -->
<bean id="methodCacheInterceptor" class="com.miao.service.MethodCacheInterceptor">
<property name="cache">
<ref local="methodCache"/>
</property>
</bean>
<!-- 配置要拦截的service, 拦截service包下所有类的所有方法 -->
<aop:config>
<aop:pointcut id="methodCachePointCut" expression="execution(* com.miao.service.*.*(..))" />
<aop:advisor pointcut-ref="methodCachePointCut" advice-ref="methodCacheInterceptor" />
</aop:config>
<!-- 也可用此种方式 指定哪些方法使用cache-->
<!--
<bean id="methodCachePointCut" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
<property name="advice">
<ref local="methodCacheInterceptor"/>
</property>
<property name="patterns">
<list>
<value>.*getStepPartKitList</value>
</list>
</property>
</bean>
-->
3.MethodCacheInterceptor
public class MethodCacheInterceptor implements MethodInterceptor,InitializingBean {
private static final Log LOGGER = LogFactory.getLog(MethodCacheInterceptor.class);
private Cache cache;
public void setCache(Cache cache) {
this.cache = cache;
}
public Object invoke(MethodInvocation invocation) throws Throwable {
String targetName = invocation.getThis().getClass().getName();
String methodName = invocation.getMethod().getName();
Object[] arguments = invocation.getArguments();
Object result;
String cacheKey = getCacheKey(targetName, methodName, arguments);
Element element = cache.get(cacheKey);
if (element == null) {
result = invocation.proceed(); //调用被拦截的目标方法
LOGGER.info("Set into Cache");
element = new Element(cacheKey, (Serializable) result);
cache.put(element);
}
return element.getValue();
}
private String getCacheKey(String targetName, String methodName,Object[] arguments) {
StringBuffer sb = new StringBuffer();
//拼cacheKey 这里使用 className.methodName(arg1,arg2.....argN) 作为key
sb.append(targetName).append(".").append(methodName).append("(");
if ((arguments != null) && (arguments.length != 0)) {
for (int i = 0; i < arguments.length; i++) {
sb.append(arguments[i]);
if (i + 1 != arguments.length) {
sb.append(",");
}
}
}
sb.append(")");
return sb.toString();
}
public void afterPropertiesSet() throws Exception {
if(null == cache) {
throw new IllegalArgumentException("Cache should not be null.");
}
}
}
4.使用Junit测试即可,传递相同的参数,调用service内的同一个方法,只会进入DAO一次
分享到:
相关推荐
在Spring中,我们可以配置Ehcache作为缓存 provider,通过注解或XML配置来启用和管理缓存。 **Redis** 是一个高性能的键值数据库,常被用作分布式缓存系统。相比于Ehcache,Redis支持更丰富的数据结构(如字符串、...
这里的`ehcache.xml`是Ehcache的配置文件,可以定义缓存策略,比如大小限制、过期时间等。 在`ehcache.xml`中,我们可以创建一个或多个缓存区域(cache): ```xml <ehcache xmlns:xsi=...
1.通过google ehcache-spring-annotatios.jar自动注解方式实现整合Spring+Ehcache。 2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。...
在Spring配置文件(如`applicationContext.xml`)中,我们需要定义一个`CacheManager` bean来管理Ehcache实例。下面是一个基本的配置示例: ```xml <bean id="cacheManager" class="org.springframework.cache....
然后,在Spring的主配置文件中,如`applicationContext.xml`,我们需要导入Ehcache的配置,并声明一个EhcacheManager: ```xml <bean id="cacheManager" class="org.springframework.cache.ehcache....
本文将深入探讨如何在Spring框架中通过注解方式配置Ehcache,以便优化应用程序的性能。 首先,让我们理解Spring与Ehcache结合的基本概念。Ehcache是一个内存缓存系统,它可以存储数据到内存中,从而减少数据库的...
在整合这些技术时,首先需要在Spring的配置文件中定义bean,包括数据源、SqlSessionFactory(Mybatis的核心)、MapperScannerConfigurer(扫描Mapper接口)等。然后配置SpringMVC的DispatcherServlet,设置视图解析...
在Spring配置文件中,我们需要配置SqlSessionFactoryBean,指定SqlMapConfig.xml的位置,该文件包含了数据库连接和映射文件的信息。 3. **配置Ehcache** Ehcache的配置包括在Spring配置文件中声明CacheManager,...
在本实例中,Maven的pom.xml文件定义了所有依赖项,包括Spring、Spring MVC、Ehcache和Spring JDBC等,使得开发者可以方便地引入和管理这些库。 **Spring** 是一个全面的后端开发框架,提供了依赖注入(DI)、面向...
3. **Spring配置**:在Spring的配置文件(如applicationContext.xml)中启用Ehcache支持,并加载上面的ehcache.xml配置。例如: ```xml <bean id="cacheManager" class="org.springframework.cache.ehcache....
Ehcache可以集成到Spring中,通过配置文件(ehcache.xml)设置缓存策略,如缓存大小、过期时间等。 在SSH集成中,Ehcache常被用来缓存Hibernate的查询结果,避免频繁的数据库交互。Spring可以配置为自动管理Ehcache...
1. **Spring配置**:Spring的配置文件(如`applicationContext.xml`)会定义bean,包括数据源、SessionFactory(Hibernate)、缓存管理器(Ehcache)以及业务层和服务层的组件。通过依赖注入,Spring将这些组件装配...
**Spring+EhCache缓存实例...接着,在Spring的配置文件(如`applicationContext.xml`)中声明EhCache的配置: ```xml <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> ...
在web.xml中配置log4j信息打印 (需要自己将log4j的配置文件给打开) 三: 配置文件 查看/src/config/ ,配置文件可观察文件名称理解 四: 登录名为2:可以进行权限的验证,以及shiro的缓存。 登录名为任意...
MyBatis通过XML或注解的方式配置SQL和映射结果,实现了SQL与Java代码的解耦。在SpringMVC中整合MyBatis,可以使用Spring的DataSource和SqlSessionFactoryBean配置数据源和会话工厂,再通过MyBatis的...
配置Ehcache,我们可以在Spring的配置文件中定义一个`CacheManager` bean,指定Ehcache的配置文件路径。Ehcache的配置文件(如ehcache.xml)包含了缓存的命名空间、大小限制、过期策略等信息。例如: ```xml ...
3. **配置Spring**:在Spring的配置文件(如`applicationContext.xml`)中,添加Ehcache的bean配置,以使Spring能够管理Ehcache: ```xml <bean id="cacheManager" class="org.springframework.cache.ehcache....
- 配置Ehcache:创建`ehcache.xml`配置文件,设置缓存策略、大小等参数。 - 配置Spring:在Spring配置文件中启用缓存管理器,并指定使用Ehcache。 - 使用注解:在需要缓存的方法上添加`@Cacheable`、`@CacheEvict...
在"Spring+Acegi+ehcache安全框架所用jar包"这个压缩包中,你可能会找到以下关键的库文件: 1. spring-context.jar:Spring的核心库,包含Bean管理和AOP支持。 2. spring-aop.jar:Spring的面向切面编程模块,用于...
- `src/main/webapp/WEB-INF`: JSP 视图文件存放位置,Spring Boot 默认不支持 JSP,需要额外配置。 - `src/main/resources/templates`: 如果项目使用了 Thymeleaf 或者其他模板引擎,此目录下会包含模板文件。 ...