SpringBoot之——配置EHCache

转载请注明出处:https://blog.csdn.net/l1028386804/article/details/80409809

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



    
    
    
     
    

    
       

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

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

首先我们建一个实体类:

package com.lyz.springboot.thing;

/**
 * 测试实例的实体类
 * @author liuyazhuang
 *
 */
public class Thing {

	private Long id;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}
}
然后我们注入一个service,模拟数据crud
package com.lyz.springboot.thing;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.assertj.core.util.Lists;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

/**
 * 实例Service
 * @author liuyazhuang
 *
 */
@Service
public class CacheDemoServiceImpl {

	private static Map 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 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);
	}

}
最后我们建立一个控制层来访问数据做测试:
package com.lyz.springboot.thing;

import java.util.List;

import javax.validation.constraints.NotNull;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 测试实例的Controller
 * @author liuyazhuang
 *
 */
@Controller
public class ThingController {
	@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")
    @ResponseBody
    public List testlist() {
        List list=cacheDemoServiceImpl.findAll();
        return list;
    }
    
    @RequestMapping("/test/one")
    @ResponseBody
    public Thing testfind(@NotNull Long id) {
        Thing t=new Thing();
        t.setId(id);
        Thing tt=cacheDemoServiceImpl.findById(t);
        return tt;
    
    }
    
    @RequestMapping("/test/delete")
    public void testdelete(@NotNull Long id) {
        cacheDemoServiceImpl.delete(id);
    
    }
}
先执行/test/add, 然后/test/list,其次/test/one,你最后会发现的/test/one 当参数传入相同的时候时,数据是从缓存中拿了.

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

package com.lyz.springboot.thing;

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;

/**
 * SpringBoot通过代码实现EHCache的配置
 * @author liuyazhuang
 *
 */
@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;
	}

}

你可能感兴趣的:(JAVA,SpringBoot,SpringBoot)