`
孤星119
  • 浏览: 124436 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring+Ehcache xml文件配置方式

 
阅读更多

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 + redis两级缓存

    在Spring中,我们可以配置Ehcache作为缓存 provider,通过注解或XML配置来启用和管理缓存。 **Redis** 是一个高性能的键值数据库,常被用作分布式缓存系统。相比于Ehcache,Redis支持更丰富的数据结构(如字符串、...

    spring+ehcache示例整合Demo

    这里的`ehcache.xml`是Ehcache的配置文件,可以定义缓存策略,比如大小限制、过期时间等。 在`ehcache.xml`中,我们可以创建一个或多个缓存区域(cache): ```xml &lt;ehcache xmlns:xsi=...

    Struts2+Spring+Hibernate+Ehcache+AJAX+JQuery+Oracle 框架集成用户登录注册Demo工程

    1.通过google ehcache-spring-annotatios.jar自动注解方式实现整合Spring+Ehcache。 2.Action里通过struts2-spring-plugin.jar插件自动根据名字注入。 3.Ajax无刷新异步调用Struts2,返回Json数据,以用户注册为例。...

    spring+ehcache demo

    在Spring配置文件(如`applicationContext.xml`)中,我们需要定义一个`CacheManager` bean来管理Ehcache实例。下面是一个基本的配置示例: ```xml &lt;bean id="cacheManager" class="org.springframework.cache....

    Spring+Ehcache集成

    然后,在Spring的主配置文件中,如`applicationContext.xml`,我们需要导入Ehcache的配置,并声明一个EhcacheManager: ```xml &lt;bean id="cacheManager" class="org.springframework.cache.ehcache....

    Spring + Ehcache 注解形式配置

    本文将深入探讨如何在Spring框架中通过注解方式配置Ehcache,以便优化应用程序的性能。 首先,让我们理解Spring与Ehcache结合的基本概念。Ehcache是一个内存缓存系统,它可以存储数据到内存中,从而减少数据库的...

    SpringMVC+Mybatis+Spring+Shiro+ehcache整合配置文件

    在整合这些技术时,首先需要在Spring的配置文件中定义bean,包括数据源、SqlSessionFactory(Mybatis的核心)、MapperScannerConfigurer(扫描Mapper接口)等。然后配置SpringMVC的DispatcherServlet,设置视图解析...

    spring+ibatis+ehcache整合例子

    在Spring配置文件中,我们需要配置SqlSessionFactoryBean,指定SqlMapConfig.xml的位置,该文件包含了数据库连接和映射文件的信息。 3. **配置Ehcache** Ehcache的配置包括在Spring配置文件中声明CacheManager,...

    maven+spring+ehcache

    在本实例中,Maven的pom.xml文件定义了所有依赖项,包括Spring、Spring MVC、Ehcache和Spring JDBC等,使得开发者可以方便地引入和管理这些库。 **Spring** 是一个全面的后端开发框架,提供了依赖注入(DI)、面向...

    spring+ehcache完整示例demo

    3. **Spring配置**:在Spring的配置文件(如applicationContext.xml)中启用Ehcache支持,并加载上面的ehcache.xml配置。例如: ```xml &lt;bean id="cacheManager" class="org.springframework.cache.ehcache....

    ssh,struts+hibernate+spring+ehcache集成

    Ehcache可以集成到Spring中,通过配置文件(ehcache.xml)设置缓存策略,如缓存大小、过期时间等。 在SSH集成中,Ehcache常被用来缓存Hibernate的查询结果,避免频繁的数据库交互。Spring可以配置为自动管理Ehcache...

    Spring+Hibernate+ehcache整合

    1. **Spring配置**:Spring的配置文件(如`applicationContext.xml`)会定义bean,包括数据源、SessionFactory(Hibernate)、缓存管理器(Ehcache)以及业务层和服务层的组件。通过依赖注入,Spring将这些组件装配...

    Spring+EhCache缓存实例

    **Spring+EhCache缓存实例...接着,在Spring的配置文件(如`applicationContext.xml`)中声明EhCache的配置: ```xml &lt;bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"&gt; ...

    spring+shiro+ehcache例子

    在web.xml中配置log4j信息打印 (需要自己将log4j的配置文件给打开) 三: 配置文件 查看/src/config/ ,配置文件可观察文件名称理解 四: 登录名为2:可以进行权限的验证,以及shiro的缓存。 登录名为任意...

    springMVC+mybatis+ehcache整合

    MyBatis通过XML或注解的方式配置SQL和映射结果,实现了SQL与Java代码的解耦。在SpringMVC中整合MyBatis,可以使用Spring的DataSource和SqlSessionFactoryBean配置数据源和会话工厂,再通过MyBatis的...

    Ehcache(一): Spring + Ehcache开场白

    配置Ehcache,我们可以在Spring的配置文件中定义一个`CacheManager` bean,指定Ehcache的配置文件路径。Ehcache的配置文件(如ehcache.xml)包含了缓存的命名空间、大小限制、过期策略等信息。例如: ```xml ...

    Spring+ehcache整合

    3. **配置Spring**:在Spring的配置文件(如`applicationContext.xml`)中,添加Ehcache的bean配置,以使Spring能够管理Ehcache: ```xml &lt;bean id="cacheManager" class="org.springframework.cache.ehcache....

    spring+ehcache

    - 配置Ehcache:创建`ehcache.xml`配置文件,设置缓存策略、大小等参数。 - 配置Spring:在Spring配置文件中启用缓存管理器,并指定使用Ehcache。 - 使用注解:在需要缓存的方法上添加`@Cacheable`、`@CacheEvict...

    Spring+Acegi+ehcache安全框架常用jar包.rar

    在"Spring+Acegi+ehcache安全框架所用jar包"这个压缩包中,你可能会找到以下关键的库文件: 1. spring-context.jar:Spring的核心库,包含Bean管理和AOP支持。 2. spring-aop.jar:Spring的面向切面编程模块,用于...

    spring boot 使用jsp 集成hibernate+shiro+ehcache项目分享

    - `src/main/webapp/WEB-INF`: JSP 视图文件存放位置,Spring Boot 默认不支持 JSP,需要额外配置。 - `src/main/resources/templates`: 如果项目使用了 Thymeleaf 或者其他模板引擎,此目录下会包含模板文件。 ...

Global site tag (gtag.js) - Google Analytics