spring - 在缓存中找不到但不缓存结果时,如何使@Cacheable 返回null?

标签 spring caching annotations

遵循@Cacheable 注释

@Cacheable(value="books", key="#isbn")
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)
  • 根据键
  • 在缓存中查找
  • 如果找到,则从缓存中返回结果
  • 如果没有找到评估方法
  • 更新缓存
  • 返回结果

  • 这样下次使用相同的参数调用此方法时,它将从缓存中获取。

    我想要的只是
  • 根据键
  • 在缓存中查找
  • 如果找到,则从缓存中返回结果
  • 如果没有找到返回 null

  • 我不想在缓存未命中的情况下更新缓存,有没有办法使用 spring 注释来做到这一点

    最佳答案

    这是我最终得到的,诀窍是使用“除非”对我们有利

    @Cacheable(value="books", key="#isbn", unless = "#result == null")
    public Book findBookFromCache(ISBN isbn, boolean checkWarehouse, boolean includeUsed)
    {
        return null;
    }
    

    这个方法
  • 基于键
  • 在缓存中查找
  • 如果找到,则从缓存中返回结果
  • 如果未找到,则评估返回空值的方法
  • 返回值与除非条件匹配(总是返回真)
  • 空值不会被缓存
  • null 值返回给调用者
  • 关于spring - 在缓存中找不到但不缓存结果时,如何使@Cacheable 返回null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29801844/

    相关文章:

    java - Spring Integration AMQP - 响应上的 JSON 类型错误

    spring - 如何使用注解进行 Spring Lookup 方法注入(inject)?

    spring - 如何在 quartz 中 Autowiring ?

    spring - 方法中的@Value 注解有什么作用?

    java - Spring Boot 中的多态配置属性

    caching - Amazon S3 命令行将所有对象复制到自己设置缓存控制

    c++ - 在缓存 C++ 中查找命中/未命中

    php - 你怎么会忘记 Laravel 中缓存的 Eloquent 模型?

    java - 是否可以创建一个 Java 注释,其属性可以是任何注释?

    java - 如何通过 aem 对话框替换 osgi 配置属性