zoukankan      html  css  js  c++  java
  • spring源码分析之cache demo

    spring提供了对echache、guava、jcache的支持,先看一个echache的示例:

    import org.springframework.cache.CacheManager;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.cache.ehcache.EhCacheCacheManager;
    import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.io.ClassPathResource;
    
    @Configuration
    @EnableCaching
    @ComponentScan({ "com.mkyong.*" })
    public class AppConfig {
    
        @Bean
        public CacheManager cacheManager() {
            return new EhCacheCacheManager(ehCacheCacheManager().getObject());
        }
    
        @Bean
        public EhCacheManagerFactoryBean ehCacheCacheManager() {
            EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean();
            cmfb.setConfigLocation(new ClassPathResource("ehcache.xml"));
            cmfb.setShared(true);
            
            return cmfb;
        }
    
        /*@Bean
        public CacheManager defaultCacheManager() {
            return new ConcurrentMapCacheManager("books");
        }*/
        
    }

    其中 echache.xml文件如下:

    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
        monitoring="autodetect" dynamicConfig="true">
    
        <!-- <diskStore path="java.io.tmpdir" /> -->
        <diskStore path="c:\cache" />
    
        <cache name="movieFindCache" 
            maxEntriesLocalHeap="10000"
            maxEntriesLocalDisk="1000" 
            eternal="false" 
            diskSpoolBufferSizeMB="20"
            timeToIdleSeconds="300" timeToLiveSeconds="600"
            memoryStoreEvictionPolicy="LFU" 
            transactionalMode="off">
            <persistence strategy="localTempSwap" />
        </cache>
    
    </ehcache>

    缓存的使用:

    @Repository("movieDao")
    public class MovieDaoImpl implements MovieDao{
    
        @Cacheable(value="movieFindCache", key="#name")
        public Movie findByDirector(String name) {
            slowQuery(2000L);
            System.out.println("findByDirector is running...");
            return new Movie(1,"Forrest Gump","Robert Zemeckis");
        }
        
        private void slowQuery(long seconds){
            try {
                Thread.sleep(seconds);
            } catch (InterruptedException e) {
                throw new IllegalStateException(e);
            }
        }
        
    }

    参考文献:

    【1】http://www.mkyong.com/spring/spring-caching-and-ehcache-example/

  • 相关阅读:
    2017.10.12
    2017.10.25
    2017.10.24
    进度条06
    课堂练习(返回一个环状一维整数数组中最大子数组的和)
    团队项目成员和题目
    团队作业--四则运算网页版
    进度条04
    个人作业(最大子数组)
    进度条03
  • 原文地址:https://www.cnblogs.com/davidwang456/p/5695630.html
Copyright © 2011-2022 走看看