一:Spring和Ehcache缓存集成

业务问题:如果仓库不经常变动,大量进出库,总是需要查询仓库列表 (列表重复) ,使用缓存优化 !

阅读spring规范29章节

第一步: 导入ehcache的jar 和 ehcache.xml

ehcache-core-2.6.6.jar

需要导入spring-contextsupport 的jar

第二步: 配置自定义缓存区 <cache name=”” >

<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="120"

timeToLiveSeconds="120"

maxElementsOnDisk="10000000"

diskExpiryThreadIntervalSeconds="120"

memoryStoreEvictionPolicy="LRU">

<persistence strategy="localTempSwap"/>

</defaultCache>

<cache name="zidingyi"

maxElementsInMemory="10000"

eternal="false"

timeToIdleSeconds="120"

timeToLiveSeconds="120"

maxElementsOnDisk="10000000"

diskExpiryThreadIntervalSeconds="120"

memoryStoreEvictionPolicy="LRU">

<persistence strategy="localTempSwap"/>

</cache>

</ehcache>

第三步: 配置Sprin的applicationContext.xml

引用cache 名称空间

<?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:cache="http://www.springframework.org/schema/cache"

xsi:schemaLocation="

   http://www.springframework.org/schema/beans

   http://www.springframework.org/schema/beans/spring-beans.xsd

   http://www.springframework.org/schema/aop

   http://www.springframework.org/schema/aop/spring-aop.xsd

   http://www.springframework.org/schema/context

   http://www.springframework.org/schema/context/spring-context.xsd

   http://www.springframework.org/schema/tx

   http://www.springframework.org/schema/tx/spring-tx.xsd

   http://www.springframework.org/schema/cache

   http://www.springframework.org/schema/cache/spring-cache.xsd">

<!-- 缓存机制 -->

<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">

<property name="configLocation" value="classpath:ehcache.xml" />

</bean>

<bean id="springCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">

<property name="cacheManager" ref="ehCacheManager" />

</bean>

<cache:annotation-driven cache-manager="springCacheManager"/>

</beans>

第四步:程序中使用 @Cacheable 和 @CacheEvict 管理缓存

@Override

@CacheEvict(allEntries = true, value = "storemanager")

// 清空缓存区

public void saveStore(Store store) {

storeDAO.save(store);

}

@Override

@Cacheable("storemanager")

// 这里的storemanager 自定义缓存区的name

public List<Store> findAllStores() {

return storeDAO.findAll(Store.class);

}

这两个动作都是在service层进行。

二:hibernate中Ehcache的的基本配置

第一步:导入ehcache的jar包

ehcache依赖 backport-util-concurrent 和 commons-logging

第二步:配置ehcache默认的核心配置文件ehcache.xml

ehcache.xml(名字固定)(放在类路径下)

解压 ehcache的jar ,将根目录 ehcache-failsafe.xml 改名为 ehcache.xml 复制 src

配置后如下:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">

<!-- <diskStore path="java.io.tmpdir"/> -->

<!-- 缓存的路径改为z盘 -->

<diskStore path="z:"/>

<defaultCache

maxElementsInMemory="10000"

eternal="false"

timeToIdleSeconds="120"

timeToLiveSeconds="120"

overflowToDisk="true"

maxElementsOnDisk="10000000"

diskPersistent="false"

diskExpiryThreadIntervalSeconds="120"

memoryStoreEvictionPolicy="LRU"

/>

<!-- 自定义缓存配置 -->

<!-- book在开启二级缓存的时候,就不走默认的缓存配置了,走自己的配置策略 -->

<cache name="cn.itcast.a_isolation.Book"

maxElementsInMemory="1"

eternal="false"

timeToIdleSeconds="120"

timeToLiveSeconds="120"

overflowToDisk="true"

maxElementsOnDisk="10000000"

diskPersistent="false"

diskExpiryThreadIntervalSeconds="120"

memoryStoreEvictionPolicy="LRU"

/>

</ehcache>

第三步:配置Hibernate启用二级缓存

在hibernate.cfg.xml中配置

<!-- 开启“基本”二级缓存 策略-->

<property name="hibernate.cache.use_second_level_cache">true</property>

第四步:配置二级缓存提供商

<!-- 指定二级缓存产品的提供商 -->

<property  name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

第五步:配置要缓存的数据(类)和并发策略

你要缓存哪些数据-对象,这里可以有两种方法配置:

方法一: 在hibernate.cfg.xml 进行配置

<!-- 配置缓存的类- -->

<class-cache usage="read-write" class="cn.awjw.domain.qp.Customer"/>

方法二: 在XXX.hbm.xml 进行配置

<!—对类的数据进行二级缓存—>

<cache usage=”read-write”/>

三:Ehcache在shiro中的使用(maven方式)

问题:当自定义Realm实现授权方法后, 每次调用需要权限控制页面,都要调用Realm的授权方法 (Realm授权方法, 根据用户查询 角色和权限信息, 每次相同用户查询数据都是一样的 ) ----------------- 浪费性能

解决:使用缓存优化,当第一次授权,将授权数据 AuthorizationInfo 放入缓存 ,第二次以后查询,直接从缓存中取出 AuthorizationInfo 数据,不需要查询数据库

第一步: 通过坐标 导入ehcache 的jar包

<ehcache.version>2.6.10</ehcache.version>

<dependency>

<groupId>net.sf.ehcache</groupId>

<artifactId>ehcache-core</artifactId>

<version>${ehcache.version}</version>

</dependency>

第二步: 在src/main/resources 提供 ehcache.xml 配置文件

先从ehcachee的jar包copy出默认的配置,然后修改后如下:

<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="120"

timeToLiveSeconds="120"

overflowToDisk="true"

maxElementsOnDisk="10000000"

diskPersistent="false"

diskExpiryThreadIntervalSeconds="120"

memoryStoreEvictionPolicy="LRU"

/>

 <!--自己配置的缓存区 -->

<cache name="bosCache"

maxElementsInMemory="10000"

eternal="false"

timeToIdleSeconds="120"

timeToLiveSeconds="120"

overflowToDisk="true"

maxElementsOnDisk="10000000"

diskPersistent="false"

diskExpiryThreadIntervalSeconds="120"

memoryStoreEvictionPolicy="LRU">

</cache>

</ehcache>

第三步: 配置applicationContext.xml

首先要添加spring对Ehcache的支持,引入坐标

<spring-support.version>3.2.0.RELEASE</spring-support.version>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

<version>${spring-support.version}</version>

</dependency>

配置ehcache缓存管理器:

<!-- ehcache 缓存管理器  -->

<bean id="ehcacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">

<property name="configLocation" value="classpath:ehcache.xml"></property>

</bean>

第四步: shiro整合ehcache

<!-- shiro 缓存管理器 -->

<bean id="shiroCacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">

<property name="cacheManager" ref="ehcacheManager"></property>

</bean>

第五步: 将shiro缓存管理器 注入安全管理器

<!-- 安全管理器 -->

<bean id="securityManager"

class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

<!-- 在安全管理器,应该注入 Realm 连接安全数据  -->

<property name="realm" ref="myRealm"></property>

<property name="cacheManager" ref="shiroCacheManager"></property>

</bean>

第六步: 在realm指定 使用缓存区名称

<bean id="myRealm" class="cn.awjw.bos.realm. myRealm" >

<!-- 在realm指定使用缓存名称-->

<property name="authorizationCacheName" value="myCache"/>

</bean>

重启项目,即可在shiro中使用缓存技术了。

二级缓存EhCache在几种应用技术的配置方法和步骤总结的更多相关文章

  1. hibernate二级缓存ehcache

    与Session相对的是,SessionFactory也提供了相应的缓存机制.SessionFactory缓存可以依据功能和目的的不同而划分为内置缓存和外置缓存. SessionFactory的内置缓 ...

  2. Hibernate4.1.4配置二级缓存EHCache步骤

    1.当然首先引入EHCache相关的jar包 这些包不需要另外下载,在Hibernate官方网站下载Hibernate4.1.7的压缩包(如:hibernate-release-4.1.7.Final ...

  3. js相关(easyUI),触发器,ant,jbpm,hibernate二级缓存ehcache,Javamail,Lucene,jqplot,WebService,regex,struts2,oracle表空间

    *********************************************js相关********************************************* // 在指 ...

  4. hibernate二级缓存ehcache hibernate配置详解

    <!-----------------hibernate二级缓存ehcache------------------------->hibernate配置 <prop key=&quo ...

  5. Hibernate-ORM:16.Hibernate中的二级缓存Ehcache的配置

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述Hibernate中的二级缓存的配置,作者将使用的是ehcache缓存 一,目录 1.二级缓存的具 ...

  6. 四)mybatis 二级缓存 ehcache 常见问题

    1. java.io.NotSerializableException 94359 [EH_CACHE Async Replication Thread] ERROR n.s.e.d.jgroups. ...

  7. FTP服务—三种登录类型的配置方法

    目录 一.部署 二.配置vsftpd 1.匿名用户登录配置 2.系统用户登录配置 3.虚拟用户登录配置 1. 创建虚拟用户名单文件 2. 生成虚拟用户口令认证文件 3. 创建FTP根目录及虚拟用户映射 ...

  8. phpunit 生成三种日志文件的配置方法

    #目录结构 windows bin目录下 ├── phpunit.phar ├── phpunit.cmd ├── phpunit.xml ├── build.xml ├── ArrTest.php ...

  9. 5种JVM调优配置方法概览!!!

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

随机推荐

  1. ubuntu系统ssh遇到port 22:No route to host问题

    ssh遇到这个port 22:No route to host这个问题 检查防火墙状态 (iptables -L) 检查ssh状态 (ps -elf |grep ssh) 检查网络状态(换根网线)

  2. AngularJS——第5章 作用域

    第5章 作用域 通常AngularJS中应用(App)是由若干个视图(View)组合成而成的,而视图(View)又都是HTML元素,并且HTML元素是可以互相嵌套的,另一方面视图都隶属于某个控制器(C ...

  3. stark组件开发之提取公共视图函数

     路由问题, 已经解决! 然后就是视图函数的问题了: 不想重复写的解决途径就是, python  类的继承了! 写一个基类, 基类定义 增删改查. 然后其他的,全部去继承他! from django. ...

  4. rbac 表结构的。设计

    1. 问:为什么程序需要权限控制? 答:生活中的权限限制,① 看灾难片电影<2012>中富人和权贵有权登上诺亚方舟,穷苦老百姓只有等着灾难的来临:② 屌丝们,有没有想过为什么那些长得漂亮身 ...

  5. 为什么使用Reazor

    原因:类似于前边写的模板页,自己写了.还需要用replace来替换成自己想要的变量.. 常见的模板引擎:Razor.Nvelocity.Vtemplate. Razor有VS自动提示,而且有助于学习a ...

  6. JFinal Web开发学习(五)注册界面和后端验证

    效果: 直接点击注册后 : 后端验证是可靠地,前端js验证是不可靠的.只需要在浏览器删除js验证代码即可突破js验证. 1.注册界面 在WebRoot下新建regist.jsp <%@ page ...

  7. 进程同步(multiprocess.Lock、multiprocess.Semaphore、multiprocess.Event) day38

    进程同步(multiprocess.Lock.multiprocess.Semaphore.multiprocess.Event) 锁 —— multiprocess.Lock 通过刚刚的学习,我们千 ...

  8. python tcp 粘包问题解决、文件下载等

    from socket import * #以下是关于tcp:服务端 和 客户端的小例子#服务端socket_server = socket(AF_INET, SOCK_STREAM) socket_ ...

  9. python 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    http://www.cnblogs.com/linhaifeng/articles/7580830.html 三元表达式.列表推导式.生成器表达式.递归.匿名函数.内置函数

  10. C++树的插入和遍历(关于指针的指针,指针的引用的思考)

    题目 写一个树的插入和遍历的算法,插入时按照单词的字典顺序排序(左边放比它"小"的单词,右边放比它"大"的单词),对重复插入的单词进行计数. 程序源码 #inc ...