Springboot 启用 ehcache缓存

news/2025/1/11 6:58:59/

目录

  • 首先,添加依赖
  • 创建ehcache.xml配置文件
  • 修改springboot配置文件,引入ehcache.xml配置文件
  • 启用`@EnableCaching`注解
  • 实体类实现可序列化接口Serializable
  • 添加缓存注解`@Cacheable`、`@CacheEvict`
    • `@Cacheable`缓存数据
    • `@CacheEvict`清除缓存
  • 其它
    • 设置`java.io.tmpdir`子目录
  • 参考

首先,添加依赖

<!-- 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>

创建ehcache.xml配置文件

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false"><diskStore path="java.io.tmpdir/my-project-name"/><!-- maxEntriesLocalHeap:堆内存中最大缓存对象数,0没有限制 --><!-- maxElementsInMemory: 在内存中缓存的element的最大数目。--><!-- eternal:elements是否永久有效,如果为true,timeouts将被忽略,element将永不过期 --><!-- timeToIdleSeconds:失效前的空闲秒数,当eternal为false时,这个属性才有效,0为不限制 --><!-- timeToLiveSeconds:失效前的存活秒数,创建时间到失效时间的间隔为存活时间,当eternal为false时,这个属性才有效,0为不限制 --><!-- overflowToDisk: 如果内存中数据超过内存限制,是否要缓存到磁盘上 --><!-- statistics:是否收集统计信息。如果需要监控缓存使用情况,应该打开这个选项。默认为关闭(统计会影响性能)。设置statistics="true"开启统计 --><!-- overflowToDisk和diskPersistent、DiskStoreBootstrapCacheLoaderFactory是在2.5及之前版本拥有的参数;2.6及之后的版本建议使用<persistence>或<terracotta>来代替,参阅ehcache.xsd。<persistence strategy="localTempSwap"/>或<persistence strategy="none"/>With the "localTempSwap" strategy, you can use maxEntriesLocalDisk ormaxBytesLocalDisk at either the Cache or CacheManager level to control thesize of the disk tier.When the persistence strategy is "none", all cache stays in memory (withno overflow to disk nor persistence on disk).--><!--defaultCache:echcache的默认缓存策略  --><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"maxElementsOnDisk="10000000"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"><persistence strategy="localTempSwap"/></defaultCache><cache name="users"maxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"maxElementsOnDisk="10000000"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"><persistence strategy="localTempSwap"/></cache>
</ehcache>

修改springboot配置文件,引入ehcache.xml配置文件

spring:cache:type: ehcacheehcache:config: classpath:ehcache/ehcache.xml

启用@EnableCaching注解

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

实体类实现可序列化接口Serializable

由于需要实体类支持缓存中的磁盘存储,所以需要实体类实现可序列化接口。

public class User implements Serializable{ ...
}

添加缓存注解@Cacheable@CacheEvict

@Cacheable缓存数据

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Override@Cacheable(value="users")public User selectUserById(int id) {User user=this.userMapper.selectUserById(id);System.out.println("load data from db");return user;}
}

@CacheEvict清除缓存

@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Override@Cacheable(value="users")public User selectUserById(int id) {User user=this.userMapper.selectUserById(id);System.out.println("load data from db");return user;}@CacheEvict(value="users", allEntries=true)public void saveUsers(Users users) {this.userMapper.save(users);}@CacheEvict(value="users", allEntries=true)public void deleteUserById(int id) {this.userMapper.deleteUserById(id);}
}

其它

设置java.io.tmpdir子目录

<diskStore path="java.io.tmpdir/xxx"/>

参考

https://www.cnblogs.com/xzmiyx/p/9897623.html
https://blog.csdn.net/qq_33285292/article/details/108152912


http://www.ppmy.cn/news/6957.html

相关文章

setContentView学习(一)

setContentView流程分两种情况,一种是继承自Activity的情况,另一种是继承自AppCompatActivity的情况&#xff0c;下面分别介绍。 先说继承自Activity的情况&#xff0c;源码为android-30 public class Activity extends ContextThemeWrapper {public void setContentView(Lay…

【Arduino串口数据保存到excel中常用三种方法】

【Arduino串口数据保存到excel中常用三种方法】 1. 前言2. 利用excel自带Data Streamer读取2.1 启用 Data Streamer 加载项2.2 刷写代码并将微控制器连接到你的电脑2.3 excel画图记录3. 采用插件ArduSpreadsheet读取3.1 安装ArduSpreadsheet3.2 Arduino 代码4. python代码解析4…

【2027. 转换字符串的最少操作次数】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个字符串 s &#xff0c;由 n 个字符组成&#xff0c;每个字符不是 X 就是 O 。 一次 操作 定义为从 s 中选出 三个连续字符 并将选中的每个字符都转换为 O 。注意&#xff0c;如果字符已经是…

智能车|直流电机、编码器与驱动器

智能车|直流电机、编码器与驱动器直流电机直流电机原理减速器编码器编码器简介编码器的工作原理四倍频采集编码器采集程序实现驱动器TB6612FNG 电机驱动器TB6612FNG 的主要参数引脚说明电机整体接线直流电机 直流电机&#xff08;direct current machine&#xff09;是指能将直…

基于Java( jsp+servlet+javabean)+SQL sever 2017实现(Web)高校选课管理系统【100010058】

一、需求分析 开发意义&#xff1a; 随着信息技术不断向深入发展&#xff0c;越来越多的学校开始着手信息化建设。其中学生选课、成绩信息化管理就是其中重要的一块内容。学生选课与成绩信息规模大、项目条数多、信息量庞大&#xff0c;传统的人工管理方式显然已经无法满足要求…

水文监测系统-水文监测站构成 设备 功能 特点介绍以及案例分享

平升电子水文监测系统实现对江河流域水位、降水量、流量、流速、水质、闸门开启度、墒情等数据的实时采集、报送和处理。为防汛抗旱减灾提供科学依据和有效信息共享&#xff0c;保障人民群众生命财产安全&#xff0c;满足水利和经济社会发展对水文服务的需求。 2022年1月&#…

ATAC-seq分析:教程简介(1)

简介 本课程[1]介绍 Bioconductor 中的 ATACseq 分析。 该课程由 2 个部分组成。这将引导您完成正常 ATACseq 分析工作流程的每个步骤。它涵盖比对、QC、peak calling、基因组富集测试、基序富集和差异可及性测试。 环境准备 IGV IGV 可以从 BROAD 网站安装。 》 https://www.b…

C++/Java调用C++动态链接库————附带示例和详细讲解

文章目录0 准备1 C调用动态链接库2 Java调用C动态链接库3 运行0 准备 在CMake中&#xff0c;使用如下的方法把代码编译成动态/静态链接库&#xff1a; # 设置项目名 project(getMatInfo)# 设置c版本 set(CMAKE_CXX_STANDARD 11)# 如果不填写SHARE&#xff0c;默认为静态链接…