springboot添加cache缓存,并添加⾃定义缓存配置maven依赖
<!-- 缓存 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- 引⼊ehcache⽀持 -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
全局配置和具体实现
启动类上⾯添加@EnableCaching 注解
@SpringBootApplication
@EnableCaching
public class EpidemicApplication {
public static void main(String[] args) {
SpringApplication.run(EpidemicApplication.class, args);
}
}
实现上⾯添加@Cacheable
@Component
@CacheConfig(cacheNames = "orgCode")
public class OrgCodeDaoImpl implements OrgCodeDao {
@Autowired
private OrgCodeRepository orgCodeRepository;
@Cacheable(value = "orgCodeFindAll")
@Override
public List<OrgCode> findAll() {
return orgCodeRepository.findAll();
}
}
cacheable实体类需要实现Serializable
public class OrgCode implements Serializable {
}
⾃定义配置
resource⽬录下添加l,或者在application.properties⽂件中添加配置⽂件路径
spring.l
具体配置⽂件内容:
<ehcache xmlns:xsi="/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="/ehcache.xsd">
<diskStore path="pdir"/>
<defaultCache
maxElementsInMemory="50000"
maxElementsOnDisk="100000"
eternal="true"
overflowToDisk="true"
diskPersistent="false"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
diskSpoolBufferSizeMB="50"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LFU"
/>
<cache name="orgCodeFindAll"
maxElementsInMemory="1"
maxElementsOnDisk="100000"
eternal="false"
overflowToDisk="true"
diskPersistent="false"
timeToIdleSeconds="0"
timeToLiveSeconds="21600"
diskSpoolBufferSizeMB="50"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="FIFO"
/>
</ehcache>
<!--
/ehcache.xsd ⽂件idea报错,可以访问地址,将⽂件下载后引⼊项⽬,或者忽略报错,测试报错不影响使⽤
diskStore:设置缓存⽂件 .data 的创建路径
user.home – ⽤户主⽬录;
user.dir – ⽤户当前⼯作⽬录
pdir – 默认临时⽂件路径
name:缓存名称.
maxElementsInMemory:缓存最⼤个数.
maxElementsOnDisk:磁盘中最⼤缓存对象数,若是0表⽰⽆穷⼤.
eternal="false":缓存中对象是否为永久的,如果为true,超时设置将被忽略,对象从不过期
overflowToDisk="true":当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中.
diskPersistent:是否缓存虚拟机重启期数据,默认为false.
timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒),当缓存闲置 n 秒后销毁.
仅当eternal=false对象不是永久有效时使⽤,可选属性,默认值是0,也就是可闲置时间⽆穷⼤.
timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒),从开始创建的时间算起,当缓存存活 n 秒后销毁.
最⼤时间介于创建时间和失效时间之间.仅当eternal=false对象不是永久有效时使⽤,默认是0.,也就是对象存活时间⽆穷⼤.
diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区⼤⼩.默认是30MB.每个Cache都应该有⾃⼰的⼀个缓冲区.
diskExpiryThreadIntervalSeconds:对象检测线程运⾏时间间隔.标识对象状态的线程多长时间运⾏⼀次.
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存.
默认策略是LRU(最近最少使⽤).你可以设置为FIFO(先进先出)或是LFU(较少使⽤).
clearOnFlush:内存数量最⼤时是否清除.
-->
附录
报错调试
1.
java.lang.IllegalArgumentException: Cannot find cache named '' for Builder[public java.util.List com.avivacofco.epidemic.hr.dao.impl.HrUserDaoImpl.findAll()] caches=[hrFindAll] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | con 解决⽅案:
在l中添加具体cache配置
cache注解
其中重要的是两个属性即 value 和 key,其中value必填,并且在l中进⾏配置,key可以为空,如为空,spring会使⽤默认策略⽣成key。
备注:key值逻辑:引⽤参数使⽤ #p0 是⽐较适配的⼀种⽅案
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论