SpringBoot整合Ehcache

本文详细介绍如何在SpringBoot项目中整合Ehcache缓存,包括pom配置、ehcache.xml配置、yml配置、启动类注解、@Cacheable和@CacheEvict使用方法及测试案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ehcache 很好用的一个缓存,无需客户端,可持久化存储到磁盘上。本文将展示一下springboot 如何整合 ehcache

1.pom配置

        <!-- 添加ehcache支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <!-- Ehcache 坐标 -->
        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>

2.ehcache xml配置

此处可以配置多个 cache ,使用name 区分,各个配置什么意思,我这里不详说,感兴趣的请自行百度,此处我将 配置文件放在 resource 目录下

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
    <diskStore path="java.io.tmpdir"/>
    <!--defaultCache:echcache 的默认缓存策略 -->
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            maxElementsOnDisk="10000000"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </defaultCache>
    <!-- 自定义缓存策略 -->
    <cache name="msg"
           maxElementsInMemory="10000"
           eternal="false"
           timeToIdleSeconds="120"
           timeToLiveSeconds="120"
           maxElementsOnDisk="10000000"
           diskExpiryThreadIntervalSeconds="120"
           memoryStoreEvictionPolicy="LRU">
        <persistence strategy="localTempSwap"/>
    </cache>
</ehcache>

3.yml配置

spring:
  # ehcache 配置
  cache:
    ehcache:
      config: classpath:ehcache.xml

4.启动类配置

添加  @EnableCaching 开启缓存

/**
*	springboot 启动类
*/
@SpringBootApplication
@EnableCaching
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class , args);
    }

}

5. @CacheEvict ,  @Cacheable

@Cacheable 标注于方法之上,表示这个方法返回值将被缓存起来。有个参数  value 里面可以指定使用哪个缓存策略。比如说上面我在 ehcache.xml 里面定义了 msg 这个策略,我这里使用 msg

@CacheEvict  也是标准与方法之上,标准什么时候缓存失效,以及失效策略,比如说,我insert 的时候就需要把  getAll 的缓存给删掉。有个 value 参数 和 @Cacheable 的value一样。

有个 key ,可以自定义,也可以使用默认的。自定义需要这样写  key = "#msg.userId"

有个删除策略,这里我使用全部删除,更新的时候。 allEntries = true

接下来看方法。

insertSelective
    @Override
    @CacheEvict(value = {"msg"} , key = "" ,allEntries = true)
    public int insertSelective(Msg msg) {
        String id = UUID.randomUUID().toString();
        msg.setId(id);

        return msgMapper.insertSelective(msg);
    }
getAll
    @Override
    @Cacheable(value = {"msg"})
    public List<Msg> getAll() {
        return msgMapper.selectAll();
    }

6.测试

public class CacheTest extends BaseTest {

    @Autowired
    private MsgService msgService;

    @Test
    public void getAll(){
        List<Msg>  list = msgService.getAll();
        System.out.println(  list.size() );

        List<Msg>  list3 = msgService.getAll();
        System.out.println(  list3.size() );

        Msg msg = new Msg("zhangzq", "1", "学以取暖", new Date());
        msgService.insertSelective(msg);

        List<Msg>  list2 = msgService.getAll();
        System.out.println( list2.size() );

    }

}


@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class})
@WebAppConfiguration
public class BaseTest {
}

运行效果:

 

SpringBoot整合 Ehcache 的详细配置详解可以参考这篇文章: https://www.zhangshengrong.com/p/Mr1WygAZNG/

### 整合 Ehcache 到 Spring Boot 项目的指南 #### 添加必要的依赖项 为了使 Spring Boot 支持 Ehcache 缓存,`spring-boot-starter-cache` 和 `ehcache` 的 Maven/Gradle 依赖是必不可少的。前者提供了一个抽象层用于管理各种类型的缓存机制;后者作为具体的缓存解决方案被引入。 对于Maven项目而言,应在pom.xml中加入以下片段: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> </dependency> ``` 而对于 Gradle 用户,则需在 build.gradle 文件内添加相应条目[^1]。 #### 配置 Application 属性文件 创建或编辑现有的application.yml (或 .properties),定义所需的缓存名称以及指向自定义配置文件的位置(如果有的话)。下面是一个简单的YAML格式的例子: ```yaml spring: cache: type: ehcache cache-names: cache1, cache2 ehcache: config: classpath:ehcache.xml ``` 这段设置指定了两个名为 "cache1" 和 "cache2" 的缓存实例,并告知应用程序去类路径下寻找名为 `ehcache.xml` 的具体配置文档。 如果没有特别指定 `spring.cache.ehcache.config` 参数,默认情况下将会尝试加载位于classpath根目录下的 `ehcache.xml` 文件来进行初始化操作[^2]。 #### 定义 Ehcache XML 配置 最后一步是在资源目录(src/main/resources/)里放置一个合适的 `ehcache.xml` 文件,它包含了关于各个缓存区域的具体参数设定,比如最大容量、过期策略等特性。这里给出一段基础模板供参考: ```xml <?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> <!-- 默认缓存 --> <defaultCache maxEntriesLocalHeap="1000" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="120"/> <!-- 自定义缓存区 'cache1' --> <cache name="cache1" maxEntriesLocalHeap="500" eternal="true"/> <!-- 另外一个自定义缓存区 'cache2' --> <cache name="cache2" maxEntriesLocalHeap="700" timeToIdleSeconds="300" /> </ehcache> ``` 上述XML片断展示了如何为不同的命名空间(`cache1`, `cache2`)定制化各自的存储行为和生命周期属性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值