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/

  • 相关阅读:
    java并发容器
    五种单例模式的写法
    Java中Volatile关键字
    Future模式实例
    mysql笔记
    亚马逊EC2服务器登录方法
    RSA加密方法java工具类
    Base64Util工具类
    maven命令创建项目
    关于spring事务注解
  • 原文地址:https://www.cnblogs.com/davidwang456/p/5695630.html
Copyright © 2011-2022 走看看