SpringBoot使用Ehcache

Posted 帅东

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot使用Ehcache相关的知识,希望对你有一定的参考价值。

配置

maven

<!-- Spring Boot 缓存支持启动器 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <!-- ehcache -->
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>

启动类

@SpringBootApplication
@ImportResource(locations = "classpath:cache/cache_manager.xml")

EhCacheCacheManager配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:cache="http://www.springframework.org/schema/cache"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
	http://www.springframework.org/schema/cache
	http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">

    <!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效 -->
    <cache:annotation-driven cache-manager="ehCacheManager" />

    <!-- cacheManager工厂类,指定ehcache.xml的位置 -->
    <bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <property name="configLocation"  value="classpath:cache/ehcache.xml"/>
    </bean>

    <!-- 声明cacheManager -->
    <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
        <property name="cacheManager" ref="cacheManagerFactory"/>
    </bean>
</beans>

ehcache配置

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
         dynamicConfig="false">

    <diskStore path="java.io.tmpdir/ehcache"/>
    <!--
        diskStore path:用来配置磁盘缓存使用的物理路径
        name:	缓存名称,cache的唯一标识(ehcache会把这个cache放到HashMap里)
        eternal="false"   元素是否永恒,如果是就永不过期(必须设置)
        maxElementsOnDisk====磁盘缓存中最多可以存放的元素数量,0表示无穷大
        maxElementsInMemory="1000" 内存缓存中最多可以存放的元素数量(必须设置)
        timeToIdleSeconds="0"   元素不被访问 间隔多久过期(秒为单位). 0表示可以永远空闲,默认为0。要小于timeToLiveSeconds才有意义
        timeToLiveSeconds="600" 元素在缓存里存在的时间(秒为单位). 0 表示永远存在不过期。
        overflowToDisk="false"  当缓存达到maxElementsInMemory值是,是否允许溢出到磁盘(必须设置)
        diskPersistent="false"  磁盘缓存在VM重新启动时是否保持(默认为false)
        diskExpiryThreadIntervalSeconds="100" 磁盘失效线程运行时间间隔,默认是120秒
        memoryStoreEvictionPolicy="LFU" 内存存储与释放策略.当达到maxElementsInMemory时
               共有三种策略,分别为LRU(最近最少使用)、LFU(最常用的)、FIFO(先进先出)默认使用"最近使用"策略
    -->
    <defaultCache
            eternal="false"
            maxElementsInMemory="3000"
            timeToIdleSeconds="3600"
            timeToLiveSeconds="0"
            overflowToDisk="true"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="100"
            memoryStoreEvictionPolicy="LRU"/>

    <cache name="userCache"
           eternal="false"
           maxElementsInMemory="2"
           overflowToDisk="true"
           timeToIdleSeconds="0"
           timeToLiveSeconds="60"
           memoryStoreEvictionPolicy="LFU"/>

</ehcache>

记录一下配置中的坑,分享给大家

问题记录

问题1

编译报错

301 Moved Permanently'

问题2

编译报错

Caused by: org.xml.sax.SAXParseException: cvc-elt.1: 找不到元素 'ehcache' 的声明。
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204) ~[na:1.8.0_251]

问题1把http变成https就会报问题2的错误
问题1和问题2,都是因为使用ImportResource去加载ehcache.xml
很多人(包括我)喜欢加载文件这样做:

@ImportResource(locations = "classpath:cache/*.xml")

但ehcache.xml不属于spring的xml配置

github地址

https://github.com/shuaidongshuai/spring-use-ehcache-redis

以上是关于SpringBoot使用Ehcache的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot使用Ehcache

Springboot整合ehcache缓存

重学SpringBoot系列之EhCache缓存,缓存问题

SpringBoot使用Ehcache

SpringBoot使用Ehcache

SpringBoot使用Ehcache