前言:
本文档将讲解一下,如何借助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>
分享到:
相关推荐
SpringModule使得在Spring中集成缓存变得更加方便,通过提供声明式的配置方式,开发者可以轻松地启用和管理缓存。 在集成EHCache时,首先需要在项目中引入相关的依赖。这通常包括Spring的AOP模块、SpringModule的...
3. **安全控制**:集成了Spring Security,提供用户认证和授权功能,保障系统的安全性。 4. **缓存管理**:支持多种缓存策略,如Redis、Ehcache等,提升系统性能。 5. **工作流引擎**:通过Activiti或Flowable实现...
- **缓存管理**:Spring Boot 可以集成 Redis 或 Ehcache 实现缓存管理,提高应用性能。 - **任务调度**:Quartz 是一个开源的作业调度框架,Spring Boot 通过集成 Quartz,可以方便地进行定时任务的管理。 3. **...
安全性方面,采用Shiro进行权限管理,搜索引擎选用了Lucene,缓存管理使用Ehcache,视图模板使用Freemarker。前端开发中,运用了Jsoup、fastjson、jQuery、Seajs等JavaScript库,Bootstrap作为前端框架,同时结合...
缓存 Ehcache 视图模板 Freemarker 其它 Jsoup、fastjson jQuery、Seajs Bootstrap 前端框架 UEditor/Markdown编辑器 font-Awesome 字体/图标 准备工作(sql文件在项目里面) 安装 Jdk8 安装 Maven 准备 IDE (如果...
缓存机制使用Ehcache,视图模板使用Freemarker。前端开发中,利用Jsoup进行HTML解析,fastjson处理JSON数据,jQuery和Seajs提供JavaScript支持,Bootstrap构建前端框架。编辑器部分,选择了UEditor和Markdown,字体...
安全性是任何应用都必须重视的,Jeesite的`lib`目录中可能有如`spring-security.jar`等文件,提供了用户认证、授权和安全控制的功能。 8. **缓存技术** 缓存可以显著提高应用性能,Jeesite可能会使用如`ehcache....
Ehcache作为缓存工具,优化了性能。视图模板使用Freemarker,前端框架采用Bootstrap,结合Jsoup、fastjson、jQuery、Seajs等工具,构建了响应式布局,确保了在各种设备上的良好展示。编辑器部分,采用了UEditor和...
为了优化性能,系统引入了Ehcache进行缓存处理,视图模板采用Freemarker,配合Jsoup、fastjson、jQuery、Seajs等前端库,以及Bootstrap前端框架,提供响应式布局。同时,使用UEditor和Markdown编辑器,以及font-...
6. **集成众多组件**:Jeesite集成了MyBatis、Shiro、Quartz、Ehcache、Druid等优秀组件,提供数据库操作、安全管理、任务调度、缓存管理等功能。 7. **易用的后台管理系统**:Jeesite提供了功能完善的后台管理系统...
│ 第10节:Spring+Mybatis实现DAO.avi │ 第11节:Mybatis的分页实现.avi │ 第12节:Service的实现以及模块化.avi │ 第13节:Spring MVC实现Web层开发.avi │ 第14节:新增和列表页面和分页tag.avi │ 第15节:带...