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來看,除了第一次訪問的時候會查詢數據庫,后面的查詢都是從緩存中獲取。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM