zoukankan      html  css  js  c++  java
  • 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="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="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来看,除了第一次访问的时候会查询数据库,后面的查询都是从缓存中获取。

      

  • 相关阅读:
    02/Oct/2019:11:55:28 类型的时间转换为
    Flume 实时获取日志内容插入MySQL
    MySQL UTC时间转北京时间 | convert_tz()函数
    使用kettle实现循环
    python 获取系统环境变量 os.environ and os.putenv
    Python
    linux如何判断上一条命令执行是否正确
    局域网两台主机通过网络共享文件
    Kettle(Pentaho)实现web方式远程执行job或transformation
    kettle发送邮件 运行日志
  • 原文地址:https://www.cnblogs.com/qiankun-site/p/5894041.html
Copyright © 2011-2022 走看看