zoukankan      html  css  js  c++  java
  • springboot 配置Ehcache

    Ehcache的基本配置说明我就不说了.小编记录一下在springboot中使用Ehcache的使用方法.

    第一步:在classpath下引入配置文件ehcache.xml

    代码如下:

    <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
             xsi:noNamespaceSchemaLocation="ehcache.xsd">  
        <cache name="demo"  
               maxEntriesLocalHeap="200"  
               timeToLiveSeconds="600">  
        </cache>  
    </ehcache> 

    第二步springboot开启对缓存的支持,你需要在springboot启动的main方法上配置@EnableCaching注解即可

    第三步就是代码使用demo了.代码如下:

    首先我们建一个实体类:

    public class Thing {
    
        private Long id;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
        
        
    }

    然后我们注入一个service,模拟数据crud

    @Service
    public class CacheDemoServiceImpl {
    
        private static Map<Long, Thing> data = new HashMap<>();//用与缓存模拟数据
    
        /**
         * 缓存的key
         */
        public static final String THING_ALL_KEY = ""thing_all"";
        /**
         * value属性表示使用哪个缓存策略,缓存策略在ehcache.xml
         */
        public static final String DEMO_CACHE_NAME = "demo";
    
        @CacheEvict(value = DEMO_CACHE_NAME, key = THING_ALL_KEY)
        public void create(Thing thing) {
            thing.setId(thing.getId());
            data.put(thing.getId(), thing);
        }
    
        @Cacheable(value = DEMO_CACHE_NAME, key = "#thing.id")
        public Thing findById(Thing thing) {
            Long id=thing.getId();
            System.err.println("没有走缓存!" + id);
            return data.get(id);
        }
    
        @Cacheable(value = DEMO_CACHE_NAME, key = THING_ALL_KEY)
        public List<Thing> findAll() {
            return Lists.newArrayList(data.values());
        }
    
        @CachePut(value = DEMO_CACHE_NAME, key = "#thing.id")
        @CacheEvict(value = DEMO_CACHE_NAME, key = THING_ALL_KEY)
        public Thing update(Thing thing) {
            System.out.println(thing);
            data.put(thing.getId(), thing);
            return thing;
        }
    
        @CacheEvict(value = DEMO_CACHE_NAME)
        public void delete(Long id) {
            data.remove(id);
        }
    
    }

    最后我们建立一个控制层来访问数据做测试:

        @Autowired
        private CacheDemoServiceImpl cacheDemoServiceImpl;
        
        @RequestMapping("/test/add")
        public void test(@NotNull Long id) {
            Thing t=new Thing();
            t.setId(id);
            cacheDemoServiceImpl.create(t);
        
        }
        
        @RequestMapping("/test/list")
        public JsonResult testlist() {
            List<Thing> list=cacheDemoServiceImpl.findAll();
            return result(200,"",list);
        }
        
        @RequestMapping("/test/one")
        public JsonResult testfind(@NotNull Long id) {
            Thing t=new Thing();
            t.setId(id);
            Thing tt=cacheDemoServiceImpl.findById(t);
            return result(200,"测试缓存",tt);
        
        }
        
        @RequestMapping("/test/delete")
        public void testdelete(@NotNull Long id) {
            cacheDemoServiceImpl.delete(id);
        
        }

    先执行/test/add, 然后/test/list,其次/test/one,你最后会发现的/test/one 当参数传入相同的时候时,数据是从缓存中拿了.

    付:下面是springboot不要Ehcache配置文件的注入方法:

    import org.springframework.cache.CacheManager;
    import org.springframework.cache.annotation.CachingConfigurer;
    import org.springframework.cache.annotation.EnableCaching;
    import org.springframework.cache.ehcache.EhCacheCacheManager;
    import org.springframework.cache.interceptor.CacheErrorHandler;
    import org.springframework.cache.interceptor.CacheResolver;
    import org.springframework.cache.interceptor.KeyGenerator;
    import org.springframework.cache.interceptor.SimpleKeyGenerator;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import net.sf.ehcache.config.CacheConfiguration;
    
    @Configuration
    @EnableCaching
    public class CachingConfiguration implements CachingConfigurer {
        @Bean(destroyMethod="shutdown")
        public net.sf.ehcache.CacheManager ehCacheManager() {
            CacheConfiguration cacheConfiguration = new CacheConfiguration();
            cacheConfiguration.setName("demo");
            cacheConfiguration.setMemoryStoreEvictionPolicy("LRU");
            cacheConfiguration.setMaxEntriesLocalHeap(1000);
            net.sf.ehcache.config.Configuration config = new net.sf.ehcache.config.Configuration();
            config.addCache(cacheConfiguration);
            return net.sf.ehcache.CacheManager.newInstance(config);
        }
    
        @Bean
        @Override
        public CacheManager cacheManager() {
            return new EhCacheCacheManager(ehCacheManager());
        }
    
        @Bean
        @Override
        public KeyGenerator keyGenerator() {
            return new SimpleKeyGenerator();
        }
    
        @Override
        public CacheResolver cacheResolver() {
            
            return null;
        }
    
        @Override
        public CacheErrorHandler errorHandler() {
            return null;
        }
        
    }

    每天就进步一点点就可以了...不要想太多

    参考:http://www.cnblogs.com/lic309/p/4072848.html

  • 相关阅读:
    工作中搜索页面搜索记录功能的封装(存储到本地)
    工作中遇到的git问题
    Git 常用命令
    帮女票做的报表(用到了angular的一些指令)
    HTML和CSS的知识点
    动画制作 手机APP制作以及响应式的实现
    CSS新内容
    JS中的循环嵌套 BOM函数
    fullpage的使用以及less, Sass的属性和JQuery自定义插件的声明和使用
    Javascript的内容
  • 原文地址:https://www.cnblogs.com/huzi007/p/6262729.html
Copyright © 2011-2022 走看看