`

借助Spring Module+EHCache,实现配置声明性缓存功能

阅读更多
前言:

  本文档将讲解一下,如何借助Spring Module项目,实现配置声明性缓存功能。

说明:

  本档的配置经过本人测试,都能正确运行。

  运行环境: Jdk6.0,
Spring-2.5,
Spring-modules-0.9,
ehcache-1.5.0.jar,
cglib-nodep-2.1_3.jar
backport-util-concurrent.jar
oro-2.0.8.jar

首先创建一个PortalMenuService服务类,本文将对其所有的以find* 方式命令的方法,进行缓存处理。当调用update* 命令时,需要其删除缓存以更做数据的更新。

 public class PortalMenuService{
 
    private String name = "matthew";
     
    public void findFavMenuByName(String name) {
        //code
    }

    public void updateFavMenuByName(String name) {
        //code
    }
 }



接下来,就是编写Spring配置文件 context.xml,以实现根据上面的要求,进行声明性缓存功能的配置

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans [url]http://www.springframework.org/schema/beans/spring-beans-2.5.xsd[/url]">  
  
    <!-- Using a EHCache cache manager -->  
    <bean id="cacheManager"  
        class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">  
        <!--<property name="cacheManagerName" value="mainCache"/>-->  
        <property name="configLocation" value="classpath:ehcache.xml" />  
    </bean>  
  
    <!-- 使用 Spring Modules对 EhCache的封装  -->  
    <bean id="cacheProviderFacade" class="org.springmodules.cache.provider.ehcache.EhCacheFacade">  
        <property name="cacheManager" ref="cacheManager" />  
    </bean>  
      
    <!-- 配置 方法 拦截器  -->  
    <!-- 缓存拦截器 -->  
    <bean id="cachingInterceptor"  
        class="org.springmodules.cache.interceptor.caching.MethodMapCachingInterceptor">  
        <property name="cacheProviderFacade" ref="cacheProviderFacade" />  
        <property name="cachingModels"> <!-- 进行cache缓存 -->  
            <props> <!-- 所有PortalMenuService对象中,以find开头的方法都将进行缓存 -->  
                <prop key="PortalMenuService.find*">cacheName=testCache</prop>  
            </props>  
        </property>  
    </bean>  
      
    <!-- 缓存刷新拦截器 -->  
    <bean id="flushingInterceptor"  
        class="org.springmodules.cache.interceptor.flush.MethodMapFlushingInterceptor">  
        <property name="cacheProviderFacade" ref="cacheProviderFacade" />  
        <property name="flushingModels"><!-- 进行cache刷新(清除) -->  
            <props>  
 <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.flushPortalMenuCache*">cacheNames=portalCache</prop>
                <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.updateMenuNode*">cacheNames=portalCache</prop>
                <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.updateFunction*">cacheNames=portalCache</prop>                 
                <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.flushUsageStaticCache*">cacheNames=usageStaticCache</prop>
                <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.flushUserFuncHitsDataForChartCache*">cacheNames=userFuncHitsDataForChartCache</prop>
                <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.flushFunctionDataForChartCache*">cacheNames=functionDataForChartCache</prop>                 
                <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.deActivateESAT*">cacheNames=esatCache</prop>
                <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.activateESAT*">cacheNames=esatCache</prop>                       
                <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.updateUserEntryPage*">cacheNames=favMenuCache,recentMenuCache,userDefaultCache,favorConfigCache</prop>
                <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.updateFavoriteMenu*">cacheNames=favMenuCache,recentMenuCache,userDefaultCache,favorConfigCache</prop>
                <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.setFavoriteMenuConfig*">cacheNames=favMenuCache,recentMenuCache,userDefaultCache,favorConfigCache</prop>
                <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.setShareFavoriteConfig*">cacheNames=favMenuCache,recentMenuCache,userDefaultCache,favorConfigCache</prop>
                <prop key="com.citi.risk.portal.ui.client.util.NavigationMenuUtil.stopShareFavoriteConfig*">cacheNames=favMenuCache,recentMenuCache,userDefaultCache,favorConfigCache</prop>   
            </props>  
        </property>  
    </bean>  
      
    <!-- 配置 基于BeanName规则的动态代理封装 -->  
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
        <property name="beanNames">  
            <list>  
                <value>portalMenuService</value>  
            </list>  
        </property>  
        <property name="interceptorNames">  
            <list>  
                <value>cachingInterceptor</value>  
                <value>flushingInterceptor</value>  
            </list>  
        </property>  
    </bean>  
  
    <bean id="portalMenuService" class="PortalMenuService"></bean>  
</beans>  


接下来,为能让EhCache能正常工作,还得编写EhCache配置文件 ehcache.xml, 内容如下:
 <ehcache>  
     <diskStore path="java.io.tmpdir" />  
     <defaultCache maxElementsInMemory="10000" eternal="false"  
         timeToIdleSeconds="2" timeToLiveSeconds="5" overflowToDisk="true"  
         maxElementsOnDisk="10000000" diskPersistent="false"  
         diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" />  
     <cache name="testCache" maxElementsInMemory="10000"  
         maxElementsOnDisk="1000" eternal="false" overflowToDisk="false"  
         diskSpoolBufferSizeMB="20" timeToIdleSeconds="60" timeToLiveSeconds="3600"  
         memoryStoreEvictionPolicy="LFU" />  
 </ehcache> 



分享到:
评论

相关推荐

    Spring中AOP实现EHCache的整合中采用SpringModule结合(二)

    SpringModule使得在Spring中集成缓存变得更加方便,通过提供声明式的配置方式,开发者可以轻松地启用和管理缓存。 在集成EHCache时,首先需要在项目中引入相关的依赖。这通常包括Spring的AOP模块、SpringModule的...

    jeesite-module-core-4.0和devtools-4.0架包

    3. **安全控制**:集成了Spring Security,提供用户认证和授权功能,保障系统的安全性。 4. **缓存管理**:支持多种缓存策略,如Redis、Ehcache等,提升系统性能。 5. **工作流引擎**:通过Activiti或Flowable实现...

    springboot整个各种中间件,各项技术学习代码

    - **缓存管理**:Spring Boot 可以集成 Redis 或 Ehcache 实现缓存管理,提高应用性能。 - **任务调度**:Quartz 是一个开源的作业调度框架,Spring Boot 通过集成 Quartz,可以方便地进行定时任务的管理。 3. **...

    SpringBoot开发非常美观的java博客系统(包含后台管理功能).pdf

    安全性方面,采用Shiro进行权限管理,搜索引擎选用了Lucene,缓存管理使用Ehcache,视图模板使用Freemarker。前端开发中,运用了Jsoup、fastjson、jQuery、Seajs等JavaScript库,Bootstrap作为前端框架,同时结合...

    SpringBoot开发非常美观的java博客系统(包含后台管理功能)

    缓存 Ehcache 视图模板 Freemarker 其它 Jsoup、fastjson jQuery、Seajs Bootstrap 前端框架 UEditor/Markdown编辑器 font-Awesome 字体/图标 准备工作(sql文件在项目里面) 安装 Jdk8 安装 Maven 准备 IDE (如果...

    SpringBoot开发非常美观的java博客系统 (2).pdf

    缓存机制使用Ehcache,视图模板使用Freemarker。前端开发中,利用Jsoup进行HTML解析,fastjson处理JSON数据,jQuery和Seajs提供JavaScript支持,Bootstrap构建前端框架。编辑器部分,选择了UEditor和Markdown,字体...

    jeesite 关联jar文件

    安全性是任何应用都必须重视的,Jeesite的`lib`目录中可能有如`spring-security.jar`等文件,提供了用户认证、授权和安全控制的功能。 8. **缓存技术** 缓存可以显著提高应用性能,Jeesite可能会使用如`ehcache....

    SpringBoot开发非常美观的java博客系统(包含后台管理功能).docx

    Ehcache作为缓存工具,优化了性能。视图模板使用Freemarker,前端框架采用Bootstrap,结合Jsoup、fastjson、jQuery、Seajs等工具,构建了响应式布局,确保了在各种设备上的良好展示。编辑器部分,采用了UEditor和...

    SpringBoot开发非常美观的java博客系统.pdf

    为了优化性能,系统引入了Ehcache进行缓存处理,视图模板采用Freemarker,配合Jsoup、fastjson、jQuery、Seajs等前端库,以及Bootstrap前端框架,提供响应式布局。同时,使用UEditor和Markdown编辑器,以及font-...

    jeesite源码包

    6. **集成众多组件**:Jeesite集成了MyBatis、Shiro、Quartz、Ehcache、Druid等优秀组件,提供数据库操作、安全管理、任务调度、缓存管理等功能。 7. **易用的后台管理系统**:Jeesite提供了功能完善的后台管理系统...

    网络架构师148讲视频课程

    │ 第10节:Spring+Mybatis实现DAO.avi │ 第11节:Mybatis的分页实现.avi │ 第12节:Service的实现以及模块化.avi │ 第13节:Spring MVC实现Web层开发.avi │ 第14节:新增和列表页面和分页tag.avi │ 第15节:带...

Global site tag (gtag.js) - Google Analytics