springboot使用caffeine cache是出现暗坑

基于springboot版本2.0.x

使用caffeine作为本地应用缓冲时,碰见一个暗坑,caffeine做了10分钟缓冲失效配置(expireAfterWrite(10))

下面是具体数据表查询缓存代码

@Cacheable(cacheNames = MerchantCacheConfig.CACHE_NAME, key = "#merId")
public MerchantDTO selectByMerId(String merId) {
        return this.selectByMerIdDB(merId);
    }

正常有merId商户数据情况下通过商户编号(merId)查询都没什么问题,突然有一天新增一家商户时怎么都查找不到商户的信息,看日志中出现下面错误

java.util.concurrent.CompletionException: java.lang.ClassCastException: org.springframework.cache.support.NullValue cannot be cast to net.easipay.fg.masterdata.dto.PsMerchantSecurityConfigDTO at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273) at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280) at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1592) at java.util.concurrent.CompletableFuture$Asy

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是 SpringBoot 使用 Caffeine 的教程: 1. 引入依赖 在 pom.xml 文件中引入 Caffeine 依赖: ```xml <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <version>2.9.0</version> </dependency> ``` 2. 配置 Caffeine 缓存 在 SpringBoot 的配置文件中添加以下配置: ```yaml spring.cache.type=caffeine spring.cache.caffeine.spec=maximumSize=100,expireAfterAccess=5m ``` 这里使用了 maximumSize 和 expireAfterAccess 两个参数,maximumSize 表示缓存的最大容量为 100,expireAfterAccess 表示对象的访问时间超过 5 分钟后会被删除。 3. 使用缓存 在 Java 代码中使用缓存,需要使用 SpringBoot 提供的 @Cacheable、@CachePut、@CacheEvict 注解。 例如,以下代码演示了如何使用 @Cacheable 注解: ```java @Service public class UserService { @Cacheable(value = "userCache", key = "#id") public User getUserById(Long id) { // 从数据库中获取用户信息 User user = userDao.getUserById(id); return user; } } ``` 这里定义了一个缓存名为 userCache,并且根据 id 作为缓存的 key 值。 4. 测试缓存 在测试类中进行测试: ```java @SpringBootTest class UserServiceTest { @Autowired private UserService userService; @Test void testCache() { // 第一次查询,从数据库中获取用户信息 User user1 = userService.getUserById(1L); System.out.println(user1); // 第二次查询,从缓存中获取用户信息 User user2 = userService.getUserById(1L); System.out.println(user2); } } ``` 这里定义了一个测试用例,第一次查询会从数据库中获取用户信息,第二次查询会从缓存中获取用户信息。 以上就是 SpringBoot 使用 Caffeine 缓存的教程,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值