1、maven项目
2、SpringBoot项目
二、解决方案 1、引入依赖2、增加配置文件net.sf.ehcache ehcache2.8.3
3、增加配置类1)位于resources根目录
2)示例图
3)ehcache.xml
package hg.demo.spring.boot.web.ehcache;
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.Configuration;
import org.springframework.core.io.ClassPathResource;
@Configuration
@EnableCaching
public class EhCacheConfig {
@Bean
public EhCacheManagerFactoryBean cacheManagerFactoryBean(){
EhCacheManagerFactoryBean bean = new EhCacheManagerFactoryBean();
bean.setConfigLocation(new ClassPathResource("ehcache.xml"));
bean.setShared(true);
return bean;
}
@Bean
public EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean bean){
return new EhCacheCacheManager(bean.getObject());
}
}
4、封装工具类
package hg.demo.spring.boot.web.ehcache;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.ehcache.EhCacheCacheManager;
import org.springframework.stereotype.Component;
@Slf4j
@Component("ehCacheUtils")
public class EhCacheUtils {
@Autowired
EhCacheCacheManager ehCacheCacheManager;
public void set(String cacheName, String key, String val) {
log.info("set(),ehcache-设值,cacheName:{}", cacheName);
log.info("set(),ehcache-设值,key:{}", key);
log.info("set(),ehcache-设值,val:{}", val);
ehCacheCacheManager.getCache(cacheName).put(key, val);
}
public String get(String cacheName, String key) {
log.info("get(),ehcache-查询,cacheName:{}", cacheName);
log.info("get(),ehcache-查询,key:{}", key);
String val = ehCacheCacheManager.getCache(cacheName).get(key, String.class);
log.info("get(),ehcache-查询,val:{}", val);
return val;
}
public void remove(String cacheName, String key) {
log.info("remove(),ehcache-删除,cacheName:{}", cacheName);
log.info("remove(),ehcache-删除,key:{}", key);
ehCacheCacheManager.getCache(cacheName).evict(key);
}
public void clear(String cacheName) {
log.info("remove(),ehcache-清空,cacheName:{}", cacheName);
ehCacheCacheManager.getCache(cacheName).clear();
}
}
5、注解方式
1)@Cacheable
作用:在查询时,会先从缓存中获取,若不存在才再发起对数据库的访问。
@Cacheable(value="策略名,配置在ehcache.xml",key="'key_'+#id")说明1: key,不支持枚举,支持静态常量
说明2: #id,即入参变量名,类型可以是对象,调用 【"#id" -> "#bean.name"】
2)@CacheEvict
作用:通常用在删除方法,用来从缓存中移除相应数据
@CacheEvict(value = "策略名,配置在ehcache.xml", key = "")3)@CachePut
作用:用于数据新增和修改操作上,用于更新缓存。
@CachePut(value = "策略名,配置在ehcache.xml", key = "")



