文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot集成Ehcache使用教程

2024-12-13 15:44

关注

前言

在平时做项目都要用到缓存,方便临时存储一些数据,加快访问速度。如果项目比较小,搭建redis服务,后期在维护上比较麻烦。今天分享一个SpringBoot集成Ehcache实现缓存的教程,适合中小项目中使用。

准备工作

1、maven中导入依赖


<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-cacheartifactId>
dependency>

<dependency>
<groupId>org.ehcachegroupId>
<artifactId>ehcacheartifactId>
<version>3.8.1version>
dependency>
<dependency>
<groupId>javax.cachegroupId>
<artifactId>cache-apiartifactId>
<version>1.1.1version>
dependency>

2、启动类上增加缓存注解

@MapperScan("com.zhangls.ehcache.dao.**")
@SpringBootApplication
@EnableCaching
public class EhcacheApplication {
public static void main(String[] args) {
SpringApplication.run(EhcacheApplication.class, args);
}
}

3、配置Ehcache

在resources下增加ehcache.xml文件,配置如下:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.ehcache.org/v3"
xmlns:jsr107="http://www.ehcache.org/v3/jsr107"
xsi:schemaLocation="
http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd
http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd">
<service>

<jsr107:defaults enable-statistics="true"/>
service>

<cache alias="UserCache">

<key-type>java.lang.Stringkey-type>

<value-type>com.zhangls.ehcache.entity.Uservalue-type>
<expiry>

<ttl unit="minutes">1ttl>
expiry>
<resources>

<heap unit="entries">2000heap>
<offheap unit="MB">100offheap>
resources>
cache>

config>

4、application.yml中配置

spring:
cache:
jcache:
config: classpath:ehcache.xml

注意事项

1.Ehcache 会在一定的规则下会序列化后存储到硬盘上,因此缓存对象必须支持序列化。

public class User implements Serializable{}

2.Spring定义了缓存接口Cache和管理缓存控制器 CacheManager,路径为:

import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager;

使用方法--手动管理方式

@Autowired
private CacheManager cacheManager;
@GetMapping("/addCache")
public String addCache() {
User user = new User();
user.setUsername("九天银河聊编程");
user.setAge(34);
Cache cache = cacheManager.getCache("UserCache");
cache.put("user", user);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
return sdf.format(now) + ": " + "保存成功";
}

@GetMapping("/getCache")
public String getCache() {
Cache cache = cacheManager.getCache("UserCache");
Cache.ValueWrapper res = cache.get("user");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
if (null != res) {
User user = (User) res.get();//这里获取 ehcache.xml 中 value-type 定义的类型,可以直接强转。
return sdf.format(now) + ": " + "姓名:" + user.getUsername() + ",年龄:" + user.getAge();
}
return sdf.format(now) + ": " + "没有找到缓存!";
}

运行结果

执行:127.0.0.1:8080/ehcache/addCache。

执行:127.0.0.1:8080/ehcache/getCache。

1分钟后执行127.0.0.1:8080/ehcache/getCache,缓存失效。

使用方法--@Cacheable 注解方式

service代码:

@Service
public class ImPersonServiceImpl implements ImPersonService{
@Resource
private PersonMapper personMapper;
@Override
@Cacheable(cacheNames = "PersonCache", key = "#personId")
public ImPerson selectByPrimaryKey(String personId){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
System.out.println(sdf.format(now) + ": 未命中缓存,请求数据库");
return personMapper.selectByPrimaryKey(personId);
}
}

controller代码:

    @GetMapping("/getCachePerson")
public ImPerson getCachePerson() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date start = new Date();
System.out.println(sdf.format(start) + ":执行开始------");
ImPerson person = imPersonService.selectByPrimaryKey("1");
Date end = new Date();
System.out.println(sdf.format(end) + ":执行结束------");
return person;
}

执行两次:127.0.0.1:8080/ehcache/getCachePerson。

控制台只打印一次SQL信息,说明第二次请求从缓存中获取。

@Cacheable属性说明

 @Cacheable(cacheNames = "PersonCache", condition  = "#id > 1")

踩坑说明

Spring 缓存注解是基于Spring AOP切面,必须走代理才能生效。同类调用或者子类调用父类带有缓存注解的方法时属于内部调用,没有走代理,所以注解不会生效。所以在使用@Cacheable时,一定要放在在service的实现类中进行调用。

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯