首页 > 代码库 > Spring基于注解ehCache缓存整合

Spring基于注解ehCache缓存整合

注解的使用参照:http://blog.csdn.net/wjacketcn/article/details/50945887 (侵删)

ehCache是纯java实现的缓存组件,spring从3.1开始引入了对ehcache的支持。

使用:

  1、在pom.xml中添加依赖

     <dependency>            <groupId>net.sf.ehcache</groupId>            <artifactId>ehcache</artifactId>            <version>2.9.1</version>        </dependency>

  2、在classPath下增加ehcache配置文件ehcache.xml

  <?xml version="1.0" encoding="UTF-8"?>        <ehcache updateCheck="false">            <diskStore path="java.io.tmpdir"/>            <defaultCache                maxElementsInMemory="10000"                eternal="false"                timeToIdleSeconds="120"                timeToLiveSeconds="120"                overflowToDisk="true"                diskPersistent="false"                diskExpiryThreadIntervalSeconds="120"                memoryStoreEvictionPolicy="LRU"                /> 
       <!--这个名称会用到--> <cache name="myCache"       maxElementsInMemory="10000" eternal="false" overflowToDisk="true" timeToIdleSeconds="30" timeToLiveSeconds="60" memoryStoreEvictionPolicy="LFU" /> </ehcache>

  3、applicationContext.xml 添加配置(类似于事物配置)

     <!--开启缓存的注解功能,否则注解无法生效-->        <cache:annotation-driven />        <!-- 声明缓存管理器 -->        <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">            <property name="cacheManager" ref="ehCacheFactory"></property>        </bean>        <!--指定工厂类及ehcache.xml文件位置-->        <bean id="ehCacheFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">            <property name="configLocation" value="classpath:ehcache.xml"/>        </bean>

  4、在service层添加注解

     @Cacheable(value="http://www.mamicode.com/myCache")  //这个名称就是ehcache.xml文件中的name属性的值        public List<FreeUrl> findAll(){            return freeUrlMapper.findAll();        }

案例:拦截器放过免认证的路径

  创建表:freeUrl 

      CREATE TABLE `freeurl` (
        `id` int(11) NOT NULL,
        `url` varchar(255) DEFAULT NULL,
        PRIMARY KEY (`id`)
      )

  上述配置完成之后进行如下配置

  1、在spring-mvc.xml中配置拦截器路径  

     <mvc:interceptors>           <bean class="com.util.interceptors.LoginInterceptors"/>        </mvc:interceptors>

  2、编写service代码并将查询结果存入缓存

     @Cacheable(value="http://www.mamicode.com/myCache")        public List<FreeUrl> findAll(){            return freeUrlMapper.findAll();        }

  3、编写拦截器代码

    public class LoginInterceptors extends HandlerInterceptorAdapter{            private Logger log = LogManager.getLogger(LoginInterceptors.class);            @Resource            private FreeUrlService freeUrlService;                        @Override            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)                    throws Exception {                //获取项目路径                String contextPath = request.getContextPath();                //获取访问路径                String requestPath = request.getServletPath();                                HttpSession session = request.getSession();                                //查询免认证路径                List<FreeUrl> list = freeUrlService.findAll();                for (FreeUrl freeUrl : list) {                    //如果请求路径为免认证路径则放开                    if(freeUrl.getUrl().equals(requestPath)){                        return true;                    }                }                return false;            }        }

4、效果查看

     启动项目之后第一次访问时会调用freeUrlService.findAll()查询数据库,同时将查询结果放入缓存。第二次及后面的访问会直接从缓存中获取已经存入的结果,
不会再去访问数据库。可以通过打印SQL来看,除了第一次访问的时候会查询数据库,后面的查询都是从缓存中获取。

  

Spring基于注解ehCache缓存整合