SpringBoot集成Caffeine缓存的实现步骤
作者:老K的Java博客 发布时间:2023-08-23 05:44:11
目录
Maven依赖
配置
示例
Maven依赖
要开始使用咖啡因Caffeine和Spring Boot,我们首先添加spring-boot-starter-cache和咖啡因Caffeine依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
</dependencies>
这些将导入基本Spring缓存支持,以及Caffeine库。
配置
现在我们需要在Spring Boot应用程序中配置缓存。
首先,我们制造一种Caffeine bean。这是控制缓存行为(如过期、缓存大小限制等)的主要配置:
@Bean
public Caffeine caffeineConfig() {
return Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.MINUTES);
}
接下来,我们需要使用Spring CacheManager接口创建另一个bean。Caffeine提供了这个接口的实现,它需要我们在上面创建的咖啡因对象:
@Bean
public CacheManager cacheManager(Caffeine caffeine) {
CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();
caffeineCacheManager.setCaffeine(caffeine);
return caffeineCacheManager;
}
最后,我们需要使用@EnableCaching注释在springboot中启用缓存。这可以添加到应用程序中的任何@Configuration类中。
示例
在启用缓存并配置为使用咖啡因的情况下,让我们看看如何在SpringBoot应用程序中使用缓存的几个示例。
在SpringBoot中使用缓存的主要方法是使用@Cacheable注释。这个注释适用于SpringBean的任何方法(甚至整个类)。它指示注册的缓存管理器将方法调用的结果存储在缓存中。
典型的用法是服务类内部:
@Service
public class AddressService {
@Cacheable
public AddressDTO getAddress(long customerId) {
// lookup and return result
}
}
使用不带参数的@Cacheable注释将强制Spring为cache和cache键使用默认名称。
我们可以通过向注释中添加一些参数来覆盖这两种行为:
@Service
public class AddressService {
@Cacheable(value = "address_cache", key = "customerId")
public AddressDTO getAddress(long customerId) {
// lookup and return result
}
}
上面的例子告诉Spring使用名为address_cache的缓存和customerId参数作为缓存键。
最后,由于缓存管理器本身就是一个SpringBean,我们还可以将它自动连接到任何其他bean中并直接使用它:
@Service
public class AddressService {
@Autowired
CacheManager cacheManager;
public AddressDTO getAddress(long customerId) {
if(cacheManager.containsKey(customerId)) {
return cacheManager.get(customerId);
}
// lookup address, cache result, and return it
}
}
完整代码地址:https://github.com/eugenp/tutorials/tree/master/spring-boot-modules/spring-boot-libraries
来源:https://javakk.com/1925.html


猜你喜欢
- 通过一个变量控制线程中断代码:package com.itsoku.chat05;import java.util.concurrent.T
- 基类:using System;using System.Collections.Generic;using System.Linq;usi
- gravity与layout_gravity属性在android布局中,我们经常会用到“重心”-gr
- 使用了Android的系统API实现了多点触控功能,多点触控对设备的硬件有一定的要求,目前市面上的手机几乎都能实现多点触控了。实现多点触控最
- 首先为大家介绍Andorid5.0原生下拉刷新简单实现。先上效果图;相对于上一个19.1.0版本中的横条效果好看了很多。使用起来也很简单。
- Java作为一面向对象的语言,具备面向对象的三大特征——继承,多态,封装。继承顾名思义,继任,承接,传承的意思。面向对象的语言有一个好处,就
- 此处项目环境为简单的springboot+mybatis环境。可查看到上一篇文章搭建的简单springboot+mybatis的项目想要控制
- private static int previousMuteMode = -1;/** * 来电静音 *
- 一、概述使用Java技术构建Web应用时, 我们通常离不开tomcat和jetty之类的servlet容器,这些Web服务器功能强大,性能强
- 这是一个自定义view画圆,对于初学自定义view的小伙伴这是一个很好的帮助。 看图代码:package sjx.com.custonvie
- 目录一、泛型类型二、为什么需要泛型三、类型擦除四、类型擦除的后遗症五、Kotlin 泛型六、上界约束七、类型通配符 & 星号投影八、
- Java BlockingQueue接口java.util.concurrent.BlockingQueue表示一个可以存取元素,并且线程安
- 前言平时我们都有用到LeakCanary来分析内存泄露的情况,这里可以来看看LeakCanary是如何实现的,它的内部又有哪些比较有意思的操
- 前言在上一篇,我们谈到了jvm垃圾回收算法详细解析,并了解了JVM中针对堆区中不同的分代采用不同的垃圾回收算法在了解了垃圾回收算法之后,很多
- 简介相信大家有配置过多数据源,或者即将配置多数据的朋友们,会发现网上大概有以下几种方案:1. 使用 AOP 切片进行动态数据源切换2. 使用
- 是不是很讨厌mybatis Generator帮我们生成代码的时候在Mapper和mapper.xml文件中生成的一大堆注解?今天在看MyB
- 1、什么是 IOC?IOC-Inversion of Control,即控制反转。它不是什么技术,而是一种设计思想。传统的创建对象的方法是直
- Java与C++实现相同的MD5加密算法1、Java版package com.lyz.utils.common;import java.io
- 下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时
- 在网上学习了一种继承系统AlertDialog然后用一统一方法控制dialog显示的方法,效果还不错,但按钮栏那里的分隔线并不是想要的。于是